在我们的java项目中,我们将日志发送到各种appender。如何通过仅更改log4j.xml等配置文件(不干涉代码)来从“错误”级别及更高级别写入这些appender的所有日志到rsyslog?
在How to log error and info messages separately into syslog with 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>
答案 0 :(得分:1)
鉴于您为rsyslog添加了一个Appender(如果没有内置的话,应该可以从互联网上的某个地方获得),你只需添加另一个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
将“过滤”通过调试和更高版本的消息(debug,info,error,...)。在appender上设置它将进一步过滤到该级别(或更高)。因此,如果将appender-ref上的level属性设置为“error”(如上所示),它将只获得级别错误和更高级别的消息。另一个appender不受此影响,仍然记录调试和信息消息。