【问题标题】:Strategies for logging to application logs from library code?从库代码记录到应用程序日志的策略?
【发布时间】:2010-10-01 21:15:11
【问题描述】:

在我工作的地方,我们使用 Log4j 进行 Web 应用程序日志记录。 log4j.jar 位于应用程序级别,而不是容器级别。我们正在使用每日滚动文件附加程序。我们的 log4j.properties 文件根据应用程序包名称定义附加程序,因此只有我们应用程序包中及以下的类会记录到我们应用程序的日志文件中。

在我的应用程序中,我使用一些支持类来扩展我们的框架。这些类不在应用程序的包中,因为它们不是我的应用程序所独有的,最终将被制作成一个 jar 库供其他应用程序使用。因此,我的日志记录语句不会被我的应用程序的附加程序获取,因此不会记录到我的应用程序的日志文件中。

我想允许我的 jar 中的类使用这些类登录到应用程序的日志文件。但是,如果我根据我的类名在应用程序的 log4j 属性文件中创建一个附加程序,我怀疑当多个应用程序使用我的 jar 时,由于 log4j.properties 文件中的类名相同,只有一个应用程序日志文件会收到我的jar 的日志记录语句,并且它将接收来自使用该 jar 的每个应用程序的所有日志记录语句。我认为是这种情况,因为我们使用静态 Logger.getLogger() 调用来检索记录器。

我首先想知道我的担心是否正确,当同一或不同容器中的多个 Web 应用程序同时使用我的 jar 时,这是否真的会发生。

我还想知道这种行为是否存在改变的“界限”。例如,无论log4j.jar是容器级jar还是app级jar,或者每个容器运行在单独的JVM中,是否存在这个问题?

最后,如果是这样的话,我想知道我应该使用什么策略来克服这个问题。

提前致谢!

【问题讨论】:

  • 你最后做了什么?

标签: java logging log4j


【解决方案1】:

如果 log4j.jar 仅在 web-app 中,那么日志将保持独立,因此每个 web-app 应该有自己的 log4j.jar 和 log4j.properties,以便所有日志保持独立。

【讨论】:

  • 即使两个 log4j.properties 文件都为我的库 jar 中使用的类定义了相同的附加程序?
【解决方案2】:

问题是 log4j 的首选模式是使用静态 *Configurator 方法,这与应用程序容器不太匹配。

当我遇到这个article 时,它为我解决了这个问题......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多