【问题标题】:Log 4j common log file for multiple web applications?用于多个 Web 应用程序的 Log4j 通用日志文件?
【发布时间】:2013-08-29 19:59:18
【问题描述】:

我有 2 个 web 应用程序,想将这两个 web 应用程序的日志消息记录到一个日志文件中。我尝试了这种情况,遇到的问题是“如果一个 Web 应用程序将消息记录到日志中,则第二个 Web 应用程序无法将消息记录到日志文件中”。如果我停止服务器,第二个应用程序能够登录。有什么帮助吗?

【问题讨论】:

  • 可能是文件句柄的争用!
  • 我不会那样做的。让两个程序写同一个文件太冒险了。
  • 同意@IgorRodriguez。使用 2 个单独的文件...

标签: java log4j


【解决方案1】:

从多个独立进程写入同一个文件是一个坏主意 - 从您的问题中可以看出,只有其中一个可以获得文件锁定。

您需要的是一个集中式日志服务器,并让您的所有应用程序通过网络登录到该服务器。见this question

【讨论】:

  • 据我所知只有一个进程可以获得独占锁——还有O_APPEND模式(见details)。但这并没有改变混合日志文件仍然不是一个好主意;-)
  • @Jost - 这在很大程度上取决于所使用的日志框架和底层操作系统,即使它有效,您也会得到交错的日志行。无论如何都会一团糟:-)
【解决方案2】:

您可以使用 Log4J 的 SocketAppender,这样更简洁 - 可以在本文中找到一个示例:log4j: How to use SocketAppender

说实话,与为您的进程拥有 两个 独立的日志文件相比,这有点矫枉过正。

顺便说一句。您的方法可能在分布式文件系统上存在问题(例如 NFS) - 不要混合使用日志文件。

希望能有所帮助。 *约斯特

【讨论】:

    【解决方案3】:

    将两个不同应用程序的日志记录到公共日志中并不是一个好主意。日志模块锁定日志文件以进行写入。如果其他应用程序试图访问相同的日志,它不会获得锁。 我会避免这样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多