我们的应用程序包含一个耳朵文件,耳内有3个war文件。我遇到过一次或多次战争记录停止的情况。例如,在某个时间之后,只有一次战争记录,或者最终所有战争都停止记录。当它停止记录时,它跨越集群中的所有JVM。每个jvm都有单独的日志文件,使用$ {sys:weblogic.NAME}。
进行配置该应用程序包含一个父pom,它当前具有log4j依赖项。因此,从应用程序构建的所有战争和jar都包含log4j依赖项。我在网上阅读的意思是,所有的战争都应该共享一套log4j库 - 而不是自己的。
每https://logging.apache.org/log4j/2.0/manual/logsep.html “...日志记录类通常放在所有组件共享的位置,配置也需要可共享......”
正如所建议的那样,我正在尝试将依赖项“放在所有组件共享的位置”。我试图将它们放在WEB-INF / lib,APP-INF / lib和/ lib的ear文件夹中。但是,它永远不会记录。 仅时间我已经开始工作了将所有的jar放在[domain home] / lib目录中。但是,因为我们在域中有多个应用程序,所以我不希望我的要求影响其他应用程序 - 因此不要在域范围内使用它。
我的问题是 1)有没有人遇到过针对个别战争停止登录的相同情况? 2)我需要在哪里放置我的log4j依赖项,所以它只能由我的应用程序的组件共享?
我从父pom中删除了依赖关系,并在战争中指定了提供的范围。我只将依赖项放在ear pom.xml
中依赖
<log4j2.version>2.6.2</log4j2.version>
<slf4j.version>1.7.7</slf4j.version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- slf4j bridge -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- slf4j jcl -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
在pom.xml插件中 - &gt;配置 - &gt;模块
<!-- log4j 2 -->
<jarModule>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
<jarModule>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
<jarModule>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
<!-- slf4j bridge -->
<jarModule>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
<!-- slf4j jcl -->
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<bundleDir>WEB-INF/lib</bundleDir>
</jarModule>
在我所有战争的weblogic.xml中,我有
<wls:container-descriptor>
<wls:prefer-web-inf-classes>false</wls:prefer-web-inf-classes>
<wls:prefer-application-packages>
<wls:package-name>org.slf4j.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
<wls:package-name>com.google.common.*</wls:package-name>
<wls:package-name>org.apache.log4j.*</wls:package-name>
</wls:prefer-application-packages>
<wls:prefer-application-resources>
<wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name>
</wls:prefer-application-resources>
</wls:container-descriptor>