今天在项目中要自己控制狡立项目的日志输出到单独的日志文件中,由于所用的是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系统的话,如何把两者区分开来。
---------------------------------华丽的分隔线------------------------------------------
貌似应该多动脑,想问题得多方面考虑,昨晚这个应该就得想到的,搞到现在才搞定
昨晚又搞到太晚睡了,这样脑子会不灵活的,不行啊啊啊啊啊啊~~~~~~~~~
分享到:
相关推荐
log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档
log4j配置和加载方法log4j配置和加载方法
log4j 详细配置 log4j 详细配置 log4j 详细配置 log4j 详细配置
Log4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rar,Log4j配置,Log4j Log4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rar,Log4j配置,Log4j
常用log4j配置 [转] 常用log4j配置,
log4j中配置日志文件相对路径方法分析 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...
tomcat下的log4j日志配置,给tomcat配置log4j有好几种方法,我知道的有: 一、tomcat级别的统一日志管理 二、每个webapp分别配置log4j
主要讲述log4j的简介,以及log4j的配置和在实际应用的使用。如果您不知道如何配置log4j,那么这本书将对您有很大的帮助。
Log4j配置详解 特别清晰,大家可以下载来参考学习,有问题可以反馈
log4j配置文件以及配置文件说明 包里有一个log4j配置文件 和一个配置详解
完整的log4j配置文件
Log4j2学习笔记,引入log4j2的依赖-log4j2.xml配置模板-application.properties文件配置-使用
概述了log4j的基本配置信息。很适合初学者学习log4j的配置使用。
Log4j日志配置说明,Log4j日志配置说明Log4j日志配置说明,Log4j日志配置说明
log4j配置文件例子,可以让你轻松配置log4j
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
SpringBoot框架配置log4j和log4j2的配置代码,项目中用到的配置文件,可下载使用
Log4j配置资料大全 log4j学习 log4j配置 log4j资料
log4j2配置,文件分割,自动清除等相关配置。
log4及配置文件 有log4j文件 log4及配置文件 有log4j文件 log4及配置文件 有log4j文件