【发布时间】:2018-07-10 13:15:52
【问题描述】:
我正在使用Log4j 2 来记录我的应用程序的事件。但是我遇到了以下问题。
目前所有日志消息都被写入两个不同的附加程序。一个具有RollingFile 类型,而另一个具有Console 类型。
我想要的是 RollingFile appender 记录 INFO 级别或更高级别(ERROR、FATAL)的消息,以及 Console appender 记录 ERROR 级别或更高级别(FATAL)的消息。
在我的 log4j2.xml 文件中,我似乎只能声明整个记录器(包括其所有附加程序)的日志记录级别。这是我的 log4j2.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>%d %level %msg%n</Pattern>
</PatternLayout>
</Console>
<RollingFile name="Log" fileName="log/Log.log" filePattern="log/Log-%d{yyyy-MM-dd}-%i.log" append="false">
<PatternLayout>
<Pattern>%d %level %msg%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1 MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="Log" />
</Root>
</Loggers>
</Configuration>
有没有一种简单的方法可以做到这一点?我搜索了 log4j 文档,但找不到我要找的东西(也许我错过了?)。如果可能的话,我真的希望该解决方案适用于任何附加程序的类型;不特定于 RollingFile 和 Console。
编辑:
我看到很多问题,要求将某个级别的消息仅写入文件,同时将不同级别的消息写入不同的文件。就我而言,我需要将具有一定级别 HIGHER 的消息写入不同的文件。例如,在我提供级别为 ERROR 或 FATAL 的消息的情况下,将同时写入 RollingFile 和控制台,而级别为 INFO 的消息将仅写入 RollingFile。
【问题讨论】:
-
我真的不这么认为。在您提供的问题中,它是关于将 ONLY 信息消息写入文件,并将 ONLY 错误消息写入另一个文件。就我而言,我想将某个级别或 HIGHER 的消息写入单独的文件。