我有两个appender。一个连接到控制台,一个连接到日志文件。但那并不是那么重要。我遇到的问题是我希望所有内容都转到INFO级别的文件。然而,控制台是不同的。有一堆记录器我不想在WARN或INFO级别触摸控制台,因为它们会喷出比用户需要的信息更多的信息。
所以假设我有三个记录器A,B,C。A,B和C都应该转到INFO级别的文件追加器。 A应该转到控制台进行INFO,B应该转到控制台进行WARN,C应该转到控制台进行ERROR。 log4j配置执行此操作是什么样的?
答案 0 :(得分:0)
这样的事情应该有效:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
<Console name="STDOUT" target="SYSTEM_OUT" ignoreExceptions="false">
<PatternLayout pattern="%m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="A" level="trace" additivity="false">
<AppenderRef ref="STDOUT" level="info" />
<AppenderRef ref="RollingFile" level="info"/>
</Logger>
<Logger name="B" level="trace" additivity="false">
<AppenderRef ref="STDOUT" level="warn" />
<AppenderRef ref="RollingFile" level="info"/>
</Logger>
<Logger name="C" level="trace" additivity="false">
<AppenderRef ref="STDOUT" level="error" />
<AppenderRef ref="RollingFile" level="info"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT" level="trace" />
<AppenderRef ref="RollingFile" level="trace"/>
</Root>
</Loggers>