2015-11-02 93 views
1

我尝试配置logback,将其他日志事件记录到System.out时将错误记录到System.err。 到目前为止,我所提出的最好的方法是用过滤器定义两个appender。这解决了主要问题,但引入了一个我想避免的新问题: 有两个appender有时会发生日志事件被记录的顺序混淆。
例如:
在代码中:信息日志后跟错误日志。
在控制台上:错误在info事件之前被记录到控制台。logback:登录到System.out时的争用条件&err

我感兴趣的任何和所有的想法如何避免这个问题,同时还记录错误System.err的,其余到System.out。

回答

0

恐怕在这种情况下你通常不能强制执行“正确”的顺序。这些消息被写入两个不同的流,它们独立地被刷新到输出介质,并且它依赖于许多事情,这些事情不能控制代码或logback,两个流的内容在输出上的混合程度如何。刚刚尝试一个简单的例子:

while(true) { 
     System.out.println("XXX"); 
     System.err.println("YYYYYY"); 
    } 

虽然我的代码是同步的,XXX和YYYYY串让我的控制台上的随机混合(“XXX”或“YYYYYY”线群随机打印)。并且logback在底层做了类似的事情,并且无法强制控制台如何打印出两个单独的流。

+0

谢谢你的例子。我没有想到结果是那么极端。但是由于直到使用logback之前我没有注意到这种效果(我之前通过打印出来和之前的错误记录),所以我怀疑logback引起的问题增强了这个问题。我想知道是否有可能降低发生这种情况的几率? –