java - 如何仅将 LoggerMarker 记录到特定文件?

标签 java logging configuration log4j log4j2

我正在尝试使用 log4j2 实现以下目标:

将所有常规内容记录到控制台,但记录 MarkerFilter.FILTERED仅针对特定文件,而不是控制台。

<Configuration>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>


        <RollingFile name="FILTERED" fileName="filtered.txt" />
            <MarkerFilter marker="FILTERED" onMatch="ACCEPT" onMismatch="DENY"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="all">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILTERED" />
        </Root>
    </Loggers>
</Configuration>

以下一般有效,但记录任何 FILTERED内容要另外安慰。 但是当我删除 <AppenderRef ref="FILTERED" />表格 <root>记录器,文件中不再记录任何内容!

最佳答案

如何在控制台附加程序上使用带有 DENY 操作的标记过滤器?

您可以在 appender-ref 上设置级别,因此您不需要为此使用 ThresholdFilter

<Configuration status="warn">
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <MarkerFilter marker="FILTERED" onMatch="DENY" onMismatch="ACCEPT"/>
        </Console>

        <RollingFile name="FILTERED" fileName="filtered.txt" />
            <MarkerFilter marker="FILTERED" onMatch="ACCEPT" onMismatch="DENY"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="all">
            <AppenderRef ref="CONSOLE" level="info" />
            <AppenderRef ref="FILTERED" />
        </Root>
    </Loggers>
</Configuration>

关于java - 如何仅将 LoggerMarker 记录到特定文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743233/

相关文章:

java - 如何获取 Wicket DropDownChoice 中选定的值?

Java Webcrawler 提取电子邮件

java - 如何使用 Log4j2 xml Rewrite appender 在登录文件之前修改 LogEvent

logging - 性能统计 Hook

java - 是否可以配置 hibernate 以忽略 hibernate.cfg.xml 文件中缺少的资源?

java - 从 bin 文件夹加载类

c# - 使用 nLog 丢失日志和不一致的存档从多个进程进行日志记录

asp.net-mvc-3 - Entity Framework 4.1 代码优先的 SQL Server 2008 连接字符串

java - 如何在 Maven 中配置 Checkstyle?

java - 索引越界。应如何将 resultSet 中的数据存储到 ArrayList 中?