将现有 log4j 附加程序的日志写入调试级别 "error" 或更高级别的所有日志到 rsyslog

Write logs from existing log4j appenders all logs with debug level "error" or higher to rsyslog

在我们的 java 项目中,我们将日志发送到各种附加程序。如何通过仅更改 log4j.xml 等配置文件(不干预代码),将所有从 "error" 级别和更高级别写入这些附加程序的日志记录到 rsyslog?

中,有一个解释如何创建一个新的附加程序,根据我的理解,要跟进那个答案,我需要触摸代码。

我的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(如果尚未内置,应该可以从互联网上的某个地方获得)您只需添加另一个 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>

关于日志级别:在 Root 记录器上设置 level 将 "filter" 消息进入调试和更高级别(调试、信息、错误等)。也在 appender 上设置它会进一步过滤到该级别(或更高级别)。因此,如果您将 appender-ref 上的级别 属性 设置为 "error"(如上所示),它只会收到级别错误或更高级别的消息。另一个 appender 不会受此影响,仍会记录调试和信息消息。