我尝试以将其他日志事件记录到System.out时将错误记录到System.err的方式配置回溯。
到目前为止,我提出的最好的方法是定义两个带过滤器的appender。这解决了主要问题,但引入了一个我想避免的新问题:
有两个appender,有时会发生记录日志事件的顺序混乱
例如:
在代码中:信息日志后跟错误日志
在控制台上:错误在信息事件之前记录到控制台。
我对如何避免此问题感兴趣,同时仍将错误记录到System.err,其余部分记录到System.out。
答案 0 :(得分:1)
恐怕你一般不能强制执行"纠正"在这种情况下订购。消息被写入两个不同的流,它们被独立地刷新到输出介质,并且它取决于很多东西,它们不能控制你的代码或者记录,两个流的内容在输出上是如何混合的。试试一个简单的例子:
while(true) {
System.out.println("XXX");
System.err.println("YYYYYY");
}
虽然我的代码是同步的,但XXX和YYYYY字符串在我的控制台上随机混合(" XXX"或" YYYYYY"行随机打印)。并且logback正在做类似的事情,并且不能强制你的控制台如何打印出两个独立的流。