licweiwei

Commons-logging + Log4j 使用简记

通过网上查找资料和项目中的一些应用,记录一下Commons-logging + Log4j 的使用方法。
现在很多都是使用Commons-logging + Log4j 结合使用,而不是全部使用Log4j。common-logging,就可以自行决定在自己的应用中采用何种实现,并跟所依赖的jar包统一起来。
据common-logging的官方文档,决定实现方式的策略如下:
1.首先查找org.apache.commons.logging.Log属性,该属性可以在java代码中设置,更常见的是在classpath下的common-logging.properties文件中进行设置
2.在系统属性中查找org.apache.commons.logging.Log
3.如果类路径中有log4j的jar包,则采用log4j实现
4.如果jdk版本为1.4,采用Jdk14Logger
5.采用common-logging提供的SimpleLog

所以只要在classpath中加入Log4j的jar,Commons-logging 后台使用的还是Log4j作为日志实现类。单独使用Log4j的时候需要初始化:

  

                                    import org.apache.log4j.Logger;

                                    import org.apache.log4j.PropertyConfigurator;

                                    public class Log4j {

                                        static Logger logger = Logger.getLogger(Log4j .class);

                                        public static void main(String args[]) {

                                        PropertyConfigurator.configure("log4j.properties");

                                         logger.debug("DEBUG");  

                                         }

                                      }


 

  使用Commons-logging + Log4j 实现方法:.
                     import org.apache.commons.logging.Log;
                     import org.apache.commons.logging.LogFactory;

                class TestLog{
                        public static Log log = LogFactory.getLog(TestLog.class);
                        public static void testLog(){
                        log.debug("test Commons-logging + Log4j");
                              }
                      }
只要classpath有Log4j的jar,其实就是使用Log4j作为实现类,但是要注意的是log4j.properties一定要在classpath中,之前一直不知道程序是如何去找到log4j.properties的,后来才发现是通过classpath去找的,如果classpath中没有具体配置,就是到当前类所在目录下去查找(不包括包文件夹)。

log4j.properties简介:
log4j.rootCategory=debug, stdout, R  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
# Pattern to output the caller's file name and line number.  
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n  
log4j.appender.R=org.apache.log4j.RollingFileAppender  
log4j.appender.R.File=example.log  
log4j.appender.R.MaxFileSize=100KB  
# Keep one backup file  
log4j.appender.R.MaxBackupIndex=1  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n  
说明:  
①log4j.rootCategory = [ level ] , appenderName, appenderName,  
其中,level 是日志记录的优先级,分为OFF,FATAL,ERROR,WA R N,INFO,DEBUG, 
ALL或者您定义的级别.Log4j建议只使用四个级别,优先级从高到低分别是ERROR, 
WA R N,INFO,DEBUG.通过在这里定义的级别,您可以控制到应用程序中相应级别的日 
志信息的开关.比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息 
将不被打印出来.appenderName就是指定日志信息输出到哪个地方.您可以同时指定多个 
输出目的地.  
②配置日志信息输出目的地Appender,其语法为  
log4j.appender.appenderName = fully.qualified.name.of.appender.class  
log4j.appender.appenderName.option1 = value1  

log4j.appender.appenderName.option = valueN  
其中,Log4j提供的appender有以下几种:  
org.apache.log4j.ConsoleAppender(控制台),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), 
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)  
③配置日志信息的格式(布局),其语法为:  
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  
log4j.appender.appenderName.layout.option1 = value1  

log4j.appender.appenderName.layout.option = valueN  
其中,Log4j提供的layout有以下几种:  
org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等等信息)  
④Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:  
%m 输出代码中指定的消息  
%p 输出优先级,即DEBUG,INFO,WA R N,ERROR,FATAL  
%r 输出自应用启动到输出该log信息耗费的毫秒数  
%c 输出所属的类目,通常就是所在类的全名  
%t 输出产生该日志事件的线程名  
%n 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"  
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,  
比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  
%l 输出日志事件的发生位置,包括类目名,发生的线程,以及在代码中的行数. 
这里有2点要说明的,
一是关于log4j.appender.R.File=example.log ,如果不给定绝对路径的话,log文件的默认路径是user.dir,可以通过System.getProperty("user.dir")来得到。
而是关于%5p [%t] (%F:%L) - %m%n   5代表优先级字符串占用几个位置,%F代表文件名,%L代表行号。

使用xml来充当配置,没有去看过,所以也不了解,但是在网上也看到过依赖jar包里的log4j配置将自己应用的log4j.properties屏蔽掉的问题,说是classpath中的jxls-core-0.9.5.jar中的log4j.xml,该配置优先于他的log4j.properties,导致log4j.properties设置失效,不过不太了解是什么原因,但是有人给出了解决方案,

手工重新 configure一下:

org.apache.log4j.LogManager.resetConfiguration();
然后:

org.apache.log4j.PropertyConfigurator.configure("c:/yourlog4j.properties");

或者

org.apache.log4j.xml.DOMConfigurator.configure("c:/yourlog4j.xml");







posted on 2007-10-22 20:39 licwei 阅读(760) 评论(0)  编辑  收藏 所属分类: Technology


只有注册用户登录后才能发表评论。


网站导航: