java - log4j 计算器

标签 java log4j stack-overflow

<分区>

这是 stackoverflow 站点上真正的 stackoverflow 异常!我只是想知道以前是否有人见过它——以及他们用什么来解决它。

java.lang.StackOverflowError
at java.lang.Exception.<init>(Exception.java:41)
at java.io.IOException.<init>(IOException.java:41)
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203)
at java.io.Writer.write(Writer.java:140)
at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:44)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
at org.apache.log4j.contribs.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:395)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:835)
at org.apache.log4j.contribs.LoggingOutputStream.flush(LoggingOutputStream.java:168)
at java.io.PrintStream.write(PrintStream.java:432)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at org.apache.log4j.helpers.LogLog.error(LogLog.java:142)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:77)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:67)
at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:48)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
at org.apache.log4j.contribs.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:395)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:835)
at org.apache.log4j.contribs.LoggingOutputStream.flush(LoggingOutputStream.java:168)
at java.io.PrintStream.write(PrintStream.java:432)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at org.apache.log4j.helpers.LogLog.error(LogLog.java:142)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:77)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:67)
at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:48)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
at org.apache.log4j.contribs.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:395)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:835)
at org.apache.log4j.contribs.LoggingOutputStream.flush(LoggingOutputStream.java:168)
at java.io.PrintStream.write(PrintStream.java:432)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)

...(重复约 10 次)

    at java.io.PrintStream.write(PrintStream.java:432)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at org.apache.log4j.helpers.LogLog.error(LogLog.java:142)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:77)
at org.apache.log4j.helpers.OnlyOnceErrorHandler.error(OnlyOnceErrorHandler.java:67)
at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:48)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
at org.apache.log4j.contribs.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:395)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)

java.lang.StackOverflowError

最佳答案

此处缺少您的 log4j 配置文件和代码。

但最初的猜测是

1) LoggingOutputStream在代码的某处使用,像这样替换 System.err:

System.setErr(new PrintStream(new LoggingOutputStream(Category.getRoot(), Priority.WARN), true));

2) log4j 未正确配置并尝试将内部错误打印到 LogLog 中的 System.err .

这会创建导致堆栈溢出的循环日志记录调用。

尝试从 1) 中删除 System.err 拦截器。这将使 2) 中的内部错误浮出水面。

关于java - log4j 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575918/

相关文章:

java - 为什么不能 List<? extends Animal> 被替换为 List<Animal>?

c++ - 在堆而不是栈上初始化 C++ 结构体

c - 为什么 putenv(buf) 无法正常工作,因为 memcpy(buf + 92, "\x00\x14\xe4\xf7", 4) 将 a\x00 字节复制到 buf ?

log4j - 如何配置log4j和Selenium Grid?

Java StackOverflowError 在 java.io.PrintStream.write(PrintStream.java :480) and no further stack trace

Java - TCP - 多线程服务器 - 如何处理多个客户端连接?

java - DBUnit 在 H2 表中插入时间戳默认值解析错误

java - 我应该使用静态还是非静态 session ?

java - 如何设置 RollingFileAppender 的最大总磁盘大小?

java - 包装 log4j 或创建自定义记录器?