【问题标题】:Is log4j thread-safe?log4j 线程安全吗?
【发布时间】:2011-12-28 05:41:01
【问题描述】:

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

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

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

【问题讨论】:

  • 这听起来更像是配置错误,而不是线程问题。
  • 那么,如果每个配置都没有指向其他项目日志的链接,那么两个具有不同配置文件的项目怎么可能相互影响

标签: thread-safety log4j


【解决方案1】:

是的,log4j 是线程安全的:

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

Ref.

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

【讨论】:

    【解决方案2】:

    是的,log4j 是线程安全的。原因是 AppenderSkeleton.doAppend() 方法是同步的。 但要小心以编程方式配置! 例如,您不能在不同的附加程序中使用 TTCCLayout 的相同实例(阅读 javadoc)!看看PatternLayout 方法 format()。它更改了实例字段(StringBuffer sbuf),因此如果您在不同的附加程序中使用相同的 PatternLayout 实例,您将面临竞争条件。 EnhancedPatternLayout 更好,因为他们修改了格式方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-15
      • 2011-07-04
      • 2014-04-26
      • 2012-11-30
      • 2010-12-30
      • 2013-03-12
      • 2021-08-03
      • 2010-12-27
      相关资源
      最近更新 更多