如何在单个EAR中为不同的战争配置多个log4j?

jac*_*see 9 ear configuration log4j war

我的EAR结构如下:

APP.ear 
- APP1.war
    - WEB-INF/classes/log4j.properties
- APP2.war
    - WEB-INF/classes/log4j.properties
- app1-ejb.jar
- app2-ejb.jar
- log4j.jar
- spring.jar
- commons-lang.jar (...and other jar)
Run Code Online (Sandbox Code Playgroud)

我希望每个WAR都有自己的应用程序日志.但似乎上面的配置不起作用.APP1和APP2的日志转到APP1的日志.反正有没有创建单独的应用程序日志?

jac*_*see 8

事实证明,由于类加载器,这是不可能的.类加载器层次结构如下:

应用程序类加载器 - > Ejb类加载器 - > war类加载器

为了获得单独战争的sepearte日志,可以将log4j.jar置于战争中并让log4j使用war类加载器.但由于app1-ejb.jar和app2-ebj.jar都需要使用log4j,因此log4j.jar只能放在顶层.所以log4j在应用程序类加载器级别.

我可以指定一个log4j配置来将不同的包记录到不同的文件中.但对于像春天这样的公共图书馆,日志不能分开.