【发布时间】:2014-04-24 19:50:12
【问题描述】:
我对log4j(v2)比较陌生,但我相信我已经用尽了我的资源,所以我来这里问我的问题。
我有一个有效的 log4j 配置,我将把它附加到我的问题的末尾。该应用程序使用 cronjob 每 x 分钟运行一次。
我希望看到的 log4j 行为如下:
- 所有 INFO(及以上)记录都记录到文件 A
- 所有 ERROR(及以上)记录都记录到文件 B
- 如果出现错误(或错误),则会发送一封邮件,其中包含给定执行的 DEBUG(及错误)行。
我使用下面的配置实现了 1 和 2。使用 log4j 是否也可以使用 3 号(如果没有,为什么不呢?)如果可以,怎么做?
当前配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RandomAccessFile name="LogFile" fileName="/var/log/fileA.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</RandomAccessFile>
<RandomAccessFile name="ErrorLogFile" fileName="/var/log/fileB.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</RandomAccessFile>
<SMTP name="MailError" subject="Error occurred" to="a@b.com" smtpHost="mail.foo.bar" from="b@c.net"/>
<Async name="Async">
<AppenderRef ref="LogFile"/>
</Async>
<Async name="Errors">
<AppenderRef ref="ErrorLogFile"/>
<AppenderRef ref="MailError"/>
</Async>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console" level="INFO"/>
<AppenderRef ref="Async" level="INFO"/>
<AppenderRef ref="Errors" level="ERROR"/>
</Root>
</Loggers>
</Configuration>
【问题讨论】:
-
数字 3 应该可以通过缓冲日志语句来实现,正如 here 为 logback 建议的那样(类似的东西应该在 log4j 中可用)。
-
@vanOekel 好的,但是我必须自己编写附加程序?
-
是的,但这是一个常见的用例(在检测到错误后编写调试日志),所以我希望在某个地方有一个通用的解决方案,我只是找不到。
-
@vanOekel 我也找不到 :( 而且我不知道这是否可能,因为这将是某种“逆阈值过滤器”,但 log4j 只知道接受/中性/拒绝,其中 NEUTRAL 的意思是“查看下一条规则,如果最后它是非决定性的,则接受”。虽然我需要相反的情况(“如果非决定性,则拒绝”)。我怀疑这是可能的..