在同一个应用程序中为多个项目配置log4j。服务器

时间:2013-02-12 21:47:07

标签: java java-ee logging jboss log4j

我们有一大堆项目部署在同一个Jboss应用程序中。服务器。每个项目在其WEB-INF目录中都有自己的log4j.properties。

这个想法是让每个项目都有自己的日志文件,并在其中写入日志。

关于如何实现这一目标的任何想法。

1 个答案:

答案 0 :(得分:0)

首先,您没有提到您正在使用的JBoss版本。您需要记住,AS7之前的JBoss版本包含自己的log4j版本(库和配置文件:conf / jboss-log4j.xml),因此默认情况下JBoss会忽略您在每个版本中的log4j.properties文件。你的项目。

也就是说,您有两种方法为每个应用程序配置日志文件:

  1. 集中方式:在Jboss中配置它,通过 CONF / JBoss的-的log4j.xml。这样你就不需要修改你的了 应用程序,或
  2. 修改您的应用程序,以便他们自己动手 log4j库(你必须将它们包含在耳朵/战争中),而不是 Jboss的。
  3. 对于第一种方法,您必须在conf / jboss-log4j.xml文件中为每个应用程序定义一个appender,然后为应用程序包定义类别。例如,要为名为app1.war的应用程序配置日志文件,这些类位于名为com.foo.app1的包中,您必须添加:

       <appender name="APP1_APPENDER" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/app1.log"/>
          <param name="Append" value="true"/>
          <!-- Rollover at midnight each day -->
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>    
          <layout class="org.apache.log4j.PatternLayout">
             <!-- The default pattern: Date Priority [Category] (Thread) Message\n -->
             <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
          </layout>
       </appender>
       ...
       ...
       <category name="com.foo.app1" additivity="true">
          <priority value="INFO"/>
          <appender-ref ref="APP1_APPENDER"/>
       </category>
    

    您必须为要为其定义日志文件的每个项目分别添加一组自定义的块。

    如果您更喜欢第二种方法,如上所述,您必须在每个项目中包含log4j库并隔离每个应用程序,以便它使应用程序中包含的库不是来自JBoss的库。 Look at section 10.3.7 of the Jboss logging file了解有关此方法的更多信息。