在我工作的地方,我们使用 Log4j 进行 Web 应用程序日志记录。log4j.jar 位于应用程序级别,而不是容器级别。我们正在使用每日滚动文件附加程序。我们的 log4j.properties 文件根据应用程序包名称定义附加程序,因此只有应用程序包中及以下的类才会记录到应用程序的日志文件中。
在我的应用程序中,我使用一些支持类来扩展我们的框架。这些类不在应用程序的包中,因为它们不是我的应用程序所独有的,最终将被制作成一个 jar 库供其他应用程序使用。因此,我的日志语句不会被我的应用程序的附加程序获取,因此不会记录到我的应用程序的日志文件中。
我想允许我的 jar 中的类使用这些类登录到应用程序的日志文件。但是,如果我根据我的类名在应用程序的 log4j 属性文件中创建一个附加程序,我怀疑当多个应用程序使用我的 jar 时,由于 log4j.properties 文件中的类名相同,只有一个应用程序日志文件会收到我的jar 的日志记录语句,并且它将接收来自使用该 jar 的每个应用程序的所有日志记录语句。我认为是这种情况,因为我们使用静态 Logger.getLogger() 调用来检索记录器。
我首先想知道我的担心是否有效,如果同一或不同容器中的多个 Web 应用程序同时使用我的 jar 时会发生这种情况。
我还想知道这种行为是否存在变化的“边界”。例如,无论 log4j.jar 是容器级 jar 还是应用级 jar,或者每个容器都运行在单独的 JVM 中,是否存在此问题?
最后,如果是这种情况,我想知道我应该使用什么策略来克服这个问题。
提前致谢!