将现有 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 不会受此影响,仍会记录调试和信息消息。
在我们的 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 不会受此影响,仍会记录调试和信息消息。