使用 log4j 1.2.17 时的 Stackoverflow
Stackoverflow while using log4j 1.2.17
我在项目中使用 log4j 1.2.17 时遇到 "Whosebug" 错误。
下面是错误的堆栈跟踪
java.lang.WhosebugError
at org.apache.log4j.PatternLayout.format(PatternLayout.java:506)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.debug(Category.java:260)
at com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken(JavaOauthWithCertificate.java:42)
at com.java.oauth.client.JavaOauthWithCertificate.getTokenByCertificate(JavaOauthWithCertificate.java:112)
at com.test.sre.service.ServiceWrapperImpl.logMessage(ServiceWrapperImpl.java:54)
at com.test.sre.logging.SREWebServiceAppender.append(SREWebServiceAppender.java:59)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.debug(Category.java:260)
at com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken(JavaOauthWithCertificate.java:42)
at com.java.oauth.client.JavaOauthWithCertificate.getTokenByCertificate(JavaOauthWithCertificate.java:112)
ReadRequiredConfigurationsToObtainToken 中第 42 行的部分代码是
logger.debug(****** 验证开始 *******)
SRE Web 服务附加程序正在将日志写入数据库。这会调用扩展的 AppenderSkeleton class 来实现自定义 appender。当代码为 运行 时,执行会卡在这一点,并在一定时间后抛出错误。
我已经尝试增加 JVM 的堆栈大小和堆大小,但还没有成功。
下面是属性文件中设置的log4j配置
log4j.rootLogger=DEBUG, A1, A2, A3
# service will ignore this output, but somebody manually running might be interested
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d] %-5p %c %x - %m%n
# also log to a file - again probably not monitored in production but might be handy for debugging
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=C:\EnergyTrading\logs\debug.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d] %-5p %c %x - %m%n
#web service appender - directs log messages to
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender
Any help on this error would be greatly helpful.
看起来你的 appender SREWebServiceAppender
正在使用 JavaOauthWithCertificate
,它正在使用 log4j 进行日志记录。这样日志记录将导致更多的日志记录,并且总是以堆栈溢出结束。
您应该更新您的日志记录配置。您可以(从最明智到最不明智):
- 不在 appender 中记录 DEBUG 消息
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender
(https://logging.apache.org/log4j/1.2/faq.html#a2.9)
- 停止在 class 中记录 DEBUG 消息
com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken
(我不知道那些是什么类别)
- 停止在 root 中记录 DEBUG 消息
- 删除附加程序
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender
我在项目中使用 log4j 1.2.17 时遇到 "Whosebug" 错误。
下面是错误的堆栈跟踪
java.lang.WhosebugError
at org.apache.log4j.PatternLayout.format(PatternLayout.java:506)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.debug(Category.java:260)
at com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken(JavaOauthWithCertificate.java:42)
at com.java.oauth.client.JavaOauthWithCertificate.getTokenByCertificate(JavaOauthWithCertificate.java:112)
at com.test.sre.service.ServiceWrapperImpl.logMessage(ServiceWrapperImpl.java:54)
at com.test.sre.logging.SREWebServiceAppender.append(SREWebServiceAppender.java:59)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.debug(Category.java:260)
at com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken(JavaOauthWithCertificate.java:42)
at com.java.oauth.client.JavaOauthWithCertificate.getTokenByCertificate(JavaOauthWithCertificate.java:112)
ReadRequiredConfigurationsToObtainToken 中第 42 行的部分代码是
logger.debug(****** 验证开始 *******)
SRE Web 服务附加程序正在将日志写入数据库。这会调用扩展的 AppenderSkeleton class 来实现自定义 appender。当代码为 运行 时,执行会卡在这一点,并在一定时间后抛出错误。
我已经尝试增加 JVM 的堆栈大小和堆大小,但还没有成功。
下面是属性文件中设置的log4j配置
log4j.rootLogger=DEBUG, A1, A2, A3
# service will ignore this output, but somebody manually running might be interested
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d] %-5p %c %x - %m%n
# also log to a file - again probably not monitored in production but might be handy for debugging
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=C:\EnergyTrading\logs\debug.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d] %-5p %c %x - %m%n
#web service appender - directs log messages to
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender
Any help on this error would be greatly helpful.
看起来你的 appender SREWebServiceAppender
正在使用 JavaOauthWithCertificate
,它正在使用 log4j 进行日志记录。这样日志记录将导致更多的日志记录,并且总是以堆栈溢出结束。
您应该更新您的日志记录配置。您可以(从最明智到最不明智):
- 不在 appender 中记录 DEBUG 消息
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender
(https://logging.apache.org/log4j/1.2/faq.html#a2.9) - 停止在 class 中记录 DEBUG 消息
com.java.oauth.client.JavaOauthWithCertificate.ReadRequiredConfigurationsToObtainToken
(我不知道那些是什么类别) - 停止在 root 中记录 DEBUG 消息
- 删除附加程序
log4j.appender.A3=com.test.sre.logging.SREWebServiceAppender