【问题标题】:Log4j - logging of internal Log4j eventsLog4j - 记录内部 Log4j 事件
【发布时间】:2020-02-19 22:53:06
【问题描述】:

我在使用 log4j 设置时遇到了一些问题。

为了解决这些问题,我在 log4j 属性中启用了内部 log4j 日志记录:

log4j.debug=true

它正在工作,因为我在控制台中得到这样的日志,这很好:

log4j: Parsing for [root] with value=[DEBUG, console, rollingFile, test].
log4j: enter code here`: Level token is [DEBUG].
log4j: Category root set to DEBUG
log4j: Parsing appender named "console".
log4j: Parsing layout options for "console".

现在我需要将这些日志也保存到文件中。 我添加了适用于其他日志的 FileAppender,但不保存内部 log4j 日志。

整个log4j配置:

#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

#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 日志也将保存在文件中?很高兴有任何提示。

【问题讨论】:

  • 你能分享你的记录器配置吗?
  • @AleksandrSemyannikov 我已经添加了整个 log4j.properties。附加程序“测试”是我试图用来保存内部 log4j 事件的一个
  • @JanDryml Log4J 使用 System out/err 进行内部日志记录(请参阅 LogLog)。因此,除非您将某种控制台输出重定向到文件,否则无法将内部日志记录到日志文件中。
  • @Ramu 谢谢,重定向我工作了

标签: java logging log4j


【解决方案1】:

如果您想将日志保存在文件中,您必须为此使用属性。


# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite
log4j.appender.FILE.Append=false

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n


【讨论】:

  • 我已经添加了 FileAppender 设置,对于其他日志以及之前提到的内部 log4j 事件(例如:log4j: Parsing for [root] with value=[DEBUG, console, rollingFile,测试]。)
  • 我已经尝试过您的解决方案,但它也没有记录内部 log4j 事件
  • 我假设它处于调试级别(我还尝试将根级别设置为 TRACE,以及​​要跟踪的 FileAppender 阈值,不起作用)。但我不确定,因为它是由 log4j 本身记录的
  • 大家好,请注意,log4j 是开源的,您可以非常轻松地单步调试 log4j 的初始化代码,看看它是如何工作的。会比仅仅猜测要好得多,并且会避免堆栈溢出中的大量噪音。
猜你喜欢
  • 2017-09-25
  • 2012-07-01
  • 2020-09-21
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多