我正在尝试使用 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/