在我们的Java项目中,我们将日志发送给各种附录。如何通过更改诸如log4j.xml之类的配置文件(不处理代码)来登录所有将所有日志从"错误"级别和更高的附加器写给这些附录的所有日志?
?在如何通过log4j分开记录错误和信息消息?有一个解释如何创建一个新的appender,并且从我的理解中以跟进该答案,我需要触摸代码。
我的log4j版本是:2.4.1这是我们编写的一台机器的小log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="5">
<Appenders>
<RollingRandomAccessFile name="RollingRandomAccessFile" fileName="log/la.full.log" filePattern="log/la.full.%d{yy-dd-MM}.%i.log">
<PatternLayout>
<Pattern>%highlight{%d{DEFAULT}|%5p|%6t|%X|%m%n}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d{DEFAULT}|%5p|%6t|%X|%m%n}"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="STDOUT" level="DEBUG"/>
<AppenderRef ref="RollingRandomAccessFile" level="DEBUG"/>
</Root>
</Loggers>
</Configuration>
给定您为rsyslog添加了一个appender(如果还没有内置的话,应该从Internet上的某个地方可用)您只会添加另一个appender-ref:
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="STDOUT" level="DEBUG"/>
<AppenderRef ref="RollingRandomAccessFile" level="DEBUG"/>
<AppenderRef ref="RSYSLOG" level="ERROR"/>
</Root>
</Loggers>
关于loglevel:在root Logger上设置level
将"过滤"到调试和更高(调试,信息,错误等)的消息。也将其设置在Appender上,将进一步过滤到该级别(或更高)。因此,如果将appender-ref上的级别属性设置为"错误"(如上所示),它将只会在级别错误和更高的情况下获取消息。另一个Appender不会受到影响的影响,仍会记录调试和信息消息。