java刷新系统。用自己的记录器输出
我创建了我自己的小记录器来代替系统。出来普林顿
LogManager.getLogManager().reset();
logger = Logger.getLogger(this.toString());
logger.setLevel(loglevel);
Formatter formatter = new Formatter() {
public String format(LogRecord record) {
return new Date().toString().substring(11, 20) + record.getLevel()+" " + formatMessage(record) + System.getProperty("line.separator");
}
};
logger.addHandler(new StreamHandler(System.out, formatter));
LogManager.getLogManager().addLogger(logger);
目前,消息不会被刷新,因此它们只在应用程序终止后出现。有没有一种方法可以在打印消息后刷新消息,而不创建新类或添加许多代码行?我想让这个代码尽可能短
# 1 楼答案
问题是StreamHandler.setOutputStream将给定流包装在OutputStreamWriter中,根据javadocs,该OutputStreamWriter将:
因此,没有办法调用
StreamHandler.flush
强制将这些字节发送到控制台因为您不想创建一个新类,所以可以使用ConsoleHandler,它将刷新到控制台,但默认情况下将写入错误流。如果您还没有启动任何其他线程,您可以通过执行以下操作来解决此问题:
子类确实是最好的选择,因为您可以通过调用
LogManager.getLogManager().reset()
或调用StreamHandler.setOutputStream
来意外地关闭System.out
,这意味着您根本看不到任何输出