有没有办法过滤特定类别的log4j日志

时间:2013-04-17 05:49:11

标签: java logging file-io log4j

我需要整理属于少数类别的所有 log4j 日志,并在每天结束时发送邮件。当我使用 org.apache.log4j.DailyRollingFileAppender 将所有类别记录到相同(日期)的文件中时,我无法找到过滤生成的日志而无需读取日志文件的方法。如果有人可以建议我使用 java 来做到这一点,那就太好了。以下代码是我需要过滤的一些日志类别的示例。

log.fatal("Fatal error message");
log.error("Error message");

如果无法进行过滤,如果我至少可以找到覆盖这些类别的功能的方法,那就足够了。我的log4j.properties看起来像这样。

log =/usr/end_of_day_logs
log4j.rootLogger = DEBUG, FILE

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${log}/log.out
log4j.appender.FILE.Append=true
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n

2 个答案:

答案 0 :(得分:0)

一种选择是为单独的类别创建单独的文件,然后实现发送邮件的Appender。您可以查看DailyRollingFileAppender做了什么,并可能扩展它以通过邮件发送文件。

答案 1 :(得分:0)

您可以为每个日志级别[甚至不同的日志包]创建多个appender。

log =/usr/end_of_day_logs
log4j.rootLogger = FATAL, FFILE

log4j.appender.FFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FFILE.File=${log}/flog.out
log4j.appender.FFILE.Append=true
log4j.appender.FFILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FFILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n

log =/usr/end_of_day_logs
log4j.rootLogger = ERROR, EFILE

log4j.appender.EFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.EFILE.File=${log}/elog.out
log4j.appender.EFILE.Append=true
log4j.appender.EFILE.DatePattern='.'yyyy-MM-dd
log4j.appender.EFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.EFILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm} [%C %x~ %M:%L] %-5p - %m%n

然后使用具有所需模式的SMTP appener的另一个appender。

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.BufferSize=1
log4j.appender.MAIL.SMTPHost=smtp.example.com
log4j.appender.MAIL.From=application@example.com
log4j.appender.MAIL.To=developer@example.com
log4j.appender.MAIL.Subject=Exception in Application
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5r %-5p [%t] %c{2} - %m%n