log4j是否是线程安全的?

时间:2011-12-28 05:41:01

标签: thread-safety log4j

我有一个问题。我们在两个项目中使用log4j,这两个项目托管在同一个GlassFish服务器上。每个项目都有log4j.properties文件,该文件指向基于不同目录的文件(我们将它们命名为 Project1 Project2 )。

现在,由于一些不明原因,有时第一个项目的信息消息被写入 Project2 日志文件,反之亦然。我检查了两个项目的log4j.properties文件,没有任何内容指向其他项目的日志。

怀疑是log4j实际上并不是线程安全的,因此如果两个用户同时在两个系统中工作,则记录器的消息可能会混合。怀疑是否正确?

2 个答案:

答案 0 :(得分:7)

是的,log4j是线程安全的:

  

是的,log4j是线程安全的。 Log4j组件旨在用于   多线程系统。

Ref

您所描述的内容听起来更像是配置错误,而不是跨进程/线程问题。

答案 1 :(得分:4)

是的,log4j是线程安全的。原因是方法AppenderSkeleton.doAppend()是同步的。 但请注意以编程方式进行配置! 例如,您不能在不同的appender中使用相同的TTCCLayout实例(读取javadoc)!看一下PatternLayout方法格式()。它会更改实例字段(StringBuffer sbuf),因此如果您在不同的appender中使用相同的PatternLayout实例,则需要面对竞争条件。 EnhancedPatternLayout更好,因为他们修改了格式方法。