最近有问题,想单独打一个日志进行排查,但之前系统中用的都是xml进行log4j的配置,这个应用用的是properties,于是照葫芦画瓢在文件里新增一个appender。丫的没想到根本不生效,前面搞这玩意的同事用法根本不对,导致文件就是个摆设,于是不得不自己研究下。
参考:log4j自定义日志单独输出到指定文件夹_log4j 将日志输出到指定文件夹-CSDN博客
log4j配置详解_log4j.appender.logfile.file-CSDN博客
我自己配置如下:
#logger别名log_mail,指向我新定义的appender,也就是"mail"
log4j.logger.log_mail=error,mail
#新定义的appender:"mail",配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件
log4j.appender.mail=org.apache.log4j.RollingFileAppender
#表示日志不输出到父类的日志文件中,因为我们所有自定义的日志类都是继承rootLogger根节点的日志类,默认子类的日志会输出到父类指定的文件夹中,默认additivity是为true的
log4j.additivity.mail=false
log4j.appender.mail.Threshold=ERROR
#可以灵活地指定布局模式
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.conversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss} [%t]%l -- %m%n
log4j.appender.mail.MaxFileSize=50MB
#注意这里路径一定要写对,之前copy同事瞎写的路径导致咋也打不出来,脑淤血
log4j.appender.mail.File=/export/Logs/message-businessid.log
log4j.appender.mail.append=true
log4j.appender.mail.encoding=UTF-8
配置好之后在代码中引用即可
private final Logger mailLog = LoggerFactory.getLogger("log_mail");
这样搞完又发现个问题,这个日志不仅打进了我自己定义的日志路径,还打到了catalina.out这个文件,这是因为上面属性设置的时候additivity不是appender的属性,而是logger的属性,所以上面
#表示日志不输出到父类的日志文件中,因为我们所有自定义的日志类都是继承rootLogger根节点的日志类,默认子类的日志会输出到父类指定的文件夹中,默认additivity是为true的
log4j.additivity.mail=false
要改成
#表示日志不输出到父类的日志文件中,因为我们所有自定义的日志类都是继承rootLogger根节点的日志类,默认子类的日志会输出到父类指定的文件夹中,默认additivity是为true的
log4j.additivity.log_mail=false
因为我给logger起的名气是log_mail