如何将Log4j内部日志输出至文件?配置问题求助
解决Log4j内部日志无法写入文件的问题
我明白你的困扰——开启log4j.debug=true后,控制台能看到Log4j的内部调试日志,但这些日志没法写入已配置的文件appender里。这是因为log4j.debug=true触发的是Log4j自身(org.apache.log4j包下)的调试日志,而你的现有配置只给root logger关联了appender,并没有单独指定Log4j内部日志的输出目标。
具体解决步骤
你需要显式为org.apache.log4j这个Logger配置日志级别和关联的appender,这样它的内部日志就能被写入指定文件了。以下是修改后的完整配置,我会标注新增的关键部分:
#log4j.category.org.hibernate=INFO, hibernate log4j.category.org.hibernate.SQL=ERROR, hibernate #log4j.category.org.hibernate.type=ALL, hibernate log4j.additivity.org.hibernate.SQL=false #Root logger setting log4j.rootLogger=DEBUG, console, rollingFile, test # 新增:配置Log4j内部日志的输出,将其关联到你想要的appender(比如test或rollingFile) log4j.category.org.apache.log4j=DEBUG, test # 关闭additivity,避免内部日志重复输出到root的appender里(如果不需要重复的话) log4j.additivity.org.apache.log4j=false #Appenders configurations. log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} %5p [%t] (%F:%L) - %m%n log4j.appender.rollingFile=eu.unicorn.pcr.broker.logging.CustodianDailyRollingFileAppender log4j.appender.rollingFile.File=${catalina.home}/logs/pcr-app.log log4j.appender.rollingFile.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.rollingFile.MaxNumberOfDays=10 log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.rollingFile.layout.conversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} %5p [%t] (%F:%L) - %m%n #apender for stress request logging log4j.appender.stressTest=org.apache.log4j.DailyRollingFileAppender log4j.appender.stressTest.File=${catalina.home}/logs/requests.log log4j.appender.stressTest.MaxBackupIndex=10 log4j.appender.stressTest.layout = org.apache.log4j.PatternLayout log4j.appender.stressTest.layout.conversionPattern=%d{HH:mm:ss.SSS} [%t] - %m%n log4j.category.stressTestLogger=TRACE, stressTest log4j.additivty.stressTestLogger=false log4j.appender.hibernate=org.apache.log4j.RollingFileAppender log4j.appender.hibernate.File=${catalina.home}/logs/hibernate.log log4j.appender.hibernate.MaxFileSize=20MB log4j.appender.hibernate.MaxBackupIndex=10 log4j.appender.hibernate.layout = org.apache.log4j.PatternLayout log4j.appender.hibernate.layout.conversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [%t] (%F:%L) - %m%n # Define the test file appender log4j.appender.test=org.apache.log4j.FileAppender log4j.appender.test.File=${catalina.home}/logs/test.log log4j.appender.test.ImmediateFlush=true log4j.appender.test.Threshold=debug log4j.appender.test.Append=false log4j.appender.test.layout=org.apache.log4j.PatternLayout log4j.appender.test.layout.conversionPattern=%m%n log4j.debug=true
关键说明
log4j.category.org.apache.log4j=DEBUG, test:指定Log4j内部包的日志级别为DEBUG,并将日志输出到test这个appender(你也可以换成rollingFile或者其他自定义appender)。log4j.additivity.org.apache.log4j=false:关闭日志的传递性,这样Log4j内部日志不会再重复输出到root logger关联的appender中(如果希望同时在控制台和文件都看到,可以去掉这行)。
修改完配置后重启应用,Log4j的内部调试日志就会正常写入test.log(或者你指定的其他文件)了。
内容的提问来源于stack exchange,提问作者Jack Ouk
相关产品推荐
相关产品推荐

