在EAR中共享Log4j2 jar以防止日志停止

时间:2017-05-10 22:31:59

标签: log4j weblogic war log4j2 ear

我们的应用程序包含一个耳朵文件,耳内有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>  

0 个答案:

没有答案