1 回答
TA贡献1777条经验 获得超3个赞
堆栈跟踪(打印到 System.err)不再打印,如果没有我的更改,它会像往常一样打印
这是因为setOutputStream 关闭了先前分配的System.err流。这是JDK-4827381下的一个已知问题:调用 ConsoleHandler.setOutputStream(...) 关闭 System.err。该错误报告应该发生的是StreamHandler.setOutputStream应该调用Handler.close而不是flushAndClose().
您需要System.err使用不允许关闭流的代理来包装现有流。或者只是扩展StreamHandler并使用带有 OutputStream 的构造函数。
public class OutConsoleHandler extends StreamHandler {
public OutConsoleHandler() {
super(System.out, new SimpleFormatter());
//TODO: Read level,filter,encoding from LogManager.
}
@Override
public void publish(LogRecord record) {
super.publish(record);
super.flush();
}
@Override
public void close() {
super.flush();
}
}
添加回答
举报