1 回答

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊
堆棧跟蹤(打印到 System.err)不再打印,如果沒有我的更改,它會像往常一樣打印
這是因為setOutputStream 關(guān)閉了先前分配的System.err流。這是JDK-4827381下的一個已知問題:調(diào)用 ConsoleHandler.setOutputStream(...) 關(guān)閉 System.err。該錯誤報告應(yīng)該發(fā)生的是StreamHandler.setOutputStream應(yīng)該調(diào)用Handler.close而不是flushAndClose().
您需要System.err使用不允許關(guān)閉流的代理來包裝現(xiàn)有流。或者只是擴(kuò)展StreamHandler并使用帶有 OutputStream 的構(gòu)造函數(shù)。
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();
}
}
添加回答
舉報