应用程序特定日志记录在Jboss 5.1中

时间:2012-02-14 05:29:21

标签: java jboss log4j logging jboss5.x

我在jboss AS'S CONFIG目录中添加了以下配置

jboss-log4j.xml文件中的条目

<appender name="YYY" class="org.apache.log4j.FileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"></errorHandler>
      <param name="Append" value="false"/>
      <param name="File" value="${jboss.server.home.dir}/log/app1.log"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>
  <category name="com.XXX">
  <priority value="INFO" />
     <appender-ref ref="YYY"></appender-ref>
   </category>

我看到app1.log是在JBoss启动时创建的。我的应用程序war文件中没有特定于应用程序的log4j.properties或log4j.xml文件。我想要的是来自com.XXX的类应该登录到app1 .log。但它没有发生。

我不能在我的应用程序之战中使用log4j.properties来实现它。我的Jboss配置方式应该使用jboss-log4j.xml文件覆盖特定于应用程序的log4j.properties。

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

你绝对可以做到这一点。在$JBOSS_HOME/server/$PROFILE/conf/jboss-log4j.xml中,进行以下修改: -

 <!-- define the appender --> 
 <appender name="YYY" class="org.apache.log4j.RollingFileAppender">
            <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
            <param name="Append" value="true"/>
            <param name="MaxFileSize" value="500KB"/>
            <param name="MaxBackupIndex" value="1"/>
            <param name="File" value="${jboss.server.log.dir}/app1.log"/>

            <layout class="org.apache.log4j.PatternLayout">
                    <param name="ConversionPattern" value="%d{MM/dd/yy HH:mm:ss,SSS} %-5p [%c{1}] %m%n"/>
            </layout>
    </appender>

<!-- add the category for your classes with package name com.XXX for ERROR level -->
   <category name="com.XXX">
         <priority value="ERROR"/>
         <appender-ref ref="YYY"/>
    </category>

您甚至不需要重新启动JBoss实例。请注意$ jboss.server.log.dir($ JBOSS_HOME / server / $ PROFILE / log)在run.sh中作为JVM参数传递,或作为run.sh的命令行参数传递。

如果您没有看到任何输出,那么可能是您的应用程序没有正确实例化log4j或您的软件包名称不同,或者您正在访问错误的应用程序,或者只是您没有在代码执行中访问日志语句。确保你的类正确地实例化log4j&amp;在正确的包名下。例如:

package com.XXX;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;

public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static Logger log = Logger.getLogger(MyServlet.class);

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            log.error("My Test Log Message");
}

答案 1 :(得分:1)

除了您提到的配置之外,您还需要确保应用程序war不包含任何log4j.jar或commons-logging.jar文件。