2013-01-08 50 views
2

通常在应用程序中(例如以Web应用程序为例),我们有一个在启动过程中创建的记录器实例。它甚至可以是单身,并不重要。重要的是整个应用程序有一个实例。我们使用java.util.loggerJava Util Logger写入同步

现在图像您有来自两个不同用户的两个请求,这两个用户会引发异常,并记录那些写入日志文件的请求。在写这两个不同的日志文件的请求是否同步?或者我们需要明确地同步它们,因为我发现在极少数情况下,我们得到的日志在tomcat日志文件中的两个请求之间都被混淆了?

我并不完全关心因果关系,这里只是分离两条日志消息。

+0

如果您在两个连续的语句中调用两次日志,可能会发生混淆。原子性不再保证。 – assylias

+0

肯定没有在两个连续的陈述。它发生在代码的不同部分上的不同请求 –

+0

当我说混淆时,我不是指被其他人截断,而是交错 –

回答

5

你不需要任何同步,报价JavaDoc of Logger

记录器上的所有方法都是多线程安全的。

请注意,来自不同线程的单独调用仍然可以交错。这意味着你不会有一条消息被另一条消息中断和切片。

+1

,但这是否也保证了appender? – radai

+0

@radai:你是指处理程序?我找不到参考资料,但我确信它们也很安全。你能举一个例子吗?“混合*”是什么意思? –

+0

当我说混淆时,我不是指被其他人截取,而是交错 –