将现有log4j的日志写入调试级别为“错误”或更高级别的所有日志到rsyslog

时间:2017-08-30 07:21:04

标签: logging log4j rsyslog

在我们的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>

1 个答案:

答案 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不受此影响,仍然记录调试和信息消息。