今天,要做一个很简单的事,那就是项目上线了,需要把各个子功能的日志分开,方便系统出线问题后,日志的查看,用过log4j的童鞋们都知道,这是很简单的,配置一个appender,再配置一个category,指向这个appender即可.
第一步:我先确定现在项目用的什么日志框架
在部署完的jboss里看了一下,哇,真够丰富的,${jboss_home}\server\default\lib 里有:log4j.jar, ${jboss_home}\server\default\deploy\${project}.war\WEB-INF\lib 里有:self4j-api-1,5,2.jar ; self4j-log4j12-1.0.jar ; slf4j-simple-1.5.2.jar;log4j-1.2.14.jar,common-logging-1.1.1.jar.看来应用里sef4j+log4j 和jcl+log4j两套都支持,好吧,那只好去代码里看一下,是用的那套方案,代码中:
import org.apache.commons.logging.LogFactory;
使用的jcl方案.
这里想了一个问题,jboss的类加载顺序是怎么样的,从上面可以看出:分别在${jboss_home}\server\default\lib 和${jboss_home}\server\default\deploy\${project}.war\WEB-INF\lib 目录里,都有log4j包,其实上面没仔细说,在${jboss_home}\server\default\deploy\${project}.war\WEB-INF\lib 都有两个版本的log4j包,那实际在应用时是用那个jar包啊,好吧,先完成工作,做完才仔细分析,另外,吐糟一个这个项目的jar管理混乱问题.
第二步:JCL的实现方式:log4j? simpleLog?
好吧,姐在这里还是费了点时间,姐知道,Jakarta Commons Logging(JCL) 和self4j 一样,都是只提供一个接口,具体实现类可以配置,如果这部分的知识不懂,去看:日志管理(一):slf4j原理简单介绍 ,那么当前工程选用的那个实现方案呢?姐也知道,是在commons-logging.properties配置的,然后,去工程下找这个文件,在jboss的目录下找,都没找到,后来看了一篇文章,姐才知道,原来JCL也进步了,只要在class下找到log4j 的配置文件,就可以自动匹配,不用commons-logging.properties也可以的,self4j也是这样的,看来,技术都是朝省儿的方向发展啊!对了,JCL具体是怎么匹配的,还有个顺序问题,可以参照:http://www.blogjava.net/liuwentao253/archive/2006/08/03/61517.html.
总之,通过这步,我确定了JCL下面使用的是log4j实用的.
第三步:修改jboss中日志配置文件,实现要求的功能
${JBOSS_HOME}/server/default/conf/log4j.xml 修改为我想要的内容,如下是修改完的一部分:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!-- ===================================================================== --> <!-- --> <!-- Log4j Configuration --> <!-- --> <!-- ===================================================================== --> <!-- | For more configuration infromation and examples see the Jakarta Log4j | owebsite: http://jakarta.apache.org/log4j --> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <!-- ================================= --> <!-- Preserve messages in a local file --> <!-- ================================= --> <!-- A time/date based rolling appender --> <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log/server.log"/> <param name="Append" value="true"/> <param name="Threshold" value="INFO"/> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <appender name="ArticleTransfer" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log/transfer.log"/> <param name="Append" value="true"/> <param name="Threshold" value="INFO"/> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <appender name="Evidence" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log/evidence.log"/> <param name="Append" value="true"/> <param name="Threshold" value="INFO"/> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <!-- ============================== --> <!-- Append messages to the console --> <!-- ============================== --> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="Target" value="System.out"/> <param name="Threshold" value="INFO"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/> </layout> </appender> <!-- ================ --> <!-- Limit categories --> <!-- ================ --> <!-- Limit the org.apache category to INFO as its DEBUG is verbose --> <category name="org.apache"> <priority value="INFO"/> </category> <!-- Limit the org.jgroups category to WARN as its INFO is verbose --> <category name="org.jgroups"> <priority value="WARN"/> </category> <!-- Limit jboss axis to INFO as its DEBUG is even more verbose --> <category name="org.jboss.axis"> <priority value="INFO"/> </category> <!-- Limit the JSR77 categories --> <category name="org.jboss.management"> <priority value="INFO"/> </category> <!-- ======================= --> <!-- Setup the Root category --> <!-- ======================= --> <category name="cn.ipms.spider.evidence"> <priority value="INFO" /> <appender-ref ref="Evidence"/> </category> <category name="cn.ipms.supervise.article.service.impl.AlarmArticleTransferServiceImpl"> <priority value="INFO" /> <appender-ref ref="ArticleTransfer"/> </category> <root> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </log4j:configuration>
修改的时候,要注意log4j:configuration各个子元素的顺序,具体可见:http://qingfeng825.iteye.com/admin/blogs/1816587,ok,功能实现.
相关推荐
Log4j是Apache组织开发的一款强大的Java日志记录框架,广泛应用于各种Java应用程序中,用于收集、管理和分析程序运行过程中的日志信息。它提供了一种灵活且可配置的方式来控制日志输出,使得开发者能够更好地追踪...
通过这种方式,旧的JCL日志调用会被重定向到Log4j,并遵循我们在`log4j.properties`中定义的配置进行记录。 总结来说,`jcl-over-slf4j-1.6.0.jar`作为日志框架转换的桥梁,使得项目可以逐步从JCL过渡到更先进的SLF...
本资源包包含了Log4j的相关jar包和使用手册,旨在帮助你快速配置和使用Log4j,以便于进行高效且有序的日志管理。 首先,Log4j的核心组件包括三个部分:Logger(日志器)、Appender(输出端)和Layout(格式化器)。...
LogBack 是一个日志框架,它是 Log4j 的后继者,由 Log4j 的创始人 Ceki Gülcü 与 Sébastien Pennec 共同创建。本文将探讨十个理由,解释为什么你应该从 log4j 迁移到 LogBack。 1. **性能提升**:LogBack 在...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它提供了一个接口,允许用户在运行时动态地绑定到各种具体的日志框架,如Log4j、Java内置的日志或者Logback等。这个设计使得开发者可以在不修改...
### JAVA应用开发日志解决方案 #### 1. 简介 在软件开发与维护过程...通过上述步骤,我们已经成功介绍了如何使用Log4j、JCL以及SLF4J这三种日志框架。这些日志框架各有特点,可以根据项目的实际需求选择合适的方案。