`
小峰子
  • 浏览: 105744 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

log4j的配置问题

阅读更多

今天在项目中要自己控制狡立项目的日志输出到单独的日志文件中,由于所用的是jboss中间件服务器,所以想到了用jboss自身集成的log4j系统来控制输出日志。
  于是就修改了D:\Program Files\jboss\server\default\conf\jboss-log4j.xml这个文件。如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
   <appender name="UDBauthAppender" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/udbauth/run.log"/>
  <param name="Encoding" value="UTF-8"/>
  <param name="Threshold" value="INFO"/>
      <param name="Append" value="false"/>
      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="feng_udbauth %d %-5p [%c] %m%n"/>
      </layout>
    </appender>
    <logger name="udbauth" additivity="true">  
        <level value ="INFO"/>    
        <appender-ref ref="UDBauthAppender" />    
    </logger>
    <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
   </root>
</log4j:configuration>

 然后在代码中用以下片断来获取logger记录器和输出日志记录

import org.apache.log4j.Logger;

Logger logger = Logger.getLogger("udbauth");
logger.info("msg");

  照理说,应该就没问题了。可是在实际运行中才发现输出的日志并没有打印到指定的文件里面,倒是在服务器控制台上有输出信息。

  后来才发现,是因为自己在本身的项目里又加入了log4j的包。

  在jboss服务器中,因为已经集成了log4j,所以在{jboss.server.dir}/lib目录下你可以找到log4j.jar,以上代码的记录器org.apache.log4j.Logger正在这个包中。jboss启动加载服务时,会加载加载{jboss.server.dir}/lib/log4j.jar包中的类,并读取{jboss.server.dir}/conf/jboss-log4j.xml配置文件来加载jboss系统自身所带的log4j服务。

  而当我们在自己的项目中加入log4j.jar包时,在项目运行过程中,类加载器首先加载的是项目中类路径里的类,即先加载了我们自己引入的log4j.jar包中的类,而不是jboss系统自身所带log4j.jar,所以此时,项目工程所获取到的记录器Logger实例并没有初始化到jboss-log4j.xml的配置信息,才会出现了在项目工程里输出的日志无法输出到在jboss-log4j.xml里配置的appender中。

  最后,我把项目工程中的log4j.jar 包删除,类加载器在工程的类路径里找不到org.apache.log4j.Logger后,就到{jboss.server.dir}/lib中查找并加载log4j.jar 包中的类,最后问题解决哈。

  得出一个结论,就是得先清楚jboss类加载器的工作原理,加载类的先后顺序,还有jboss集成log4j的应用方法与自身另外配置log4j系统的话,如何把两者区分开来。

 

---------------------------------华丽的分隔线------------------------------------------

  貌似应该多动脑,想问题得多方面考虑,昨晚这个应该就得想到的,搞到现在才搞定

  昨晚又搞到太晚睡了,这样脑子会不灵活的,不行啊啊啊啊啊啊~~~~~~~~~

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics