licweiwei

          Commons-logging + Log4j 使用簡記

          通過網(wǎng)上查找資料和項目中的一些應(yīng)用,記錄一下Commons-logging + Log4j 的使用方法。
          現(xiàn)在很多都是使用Commons-logging + Log4j 結(jié)合使用,而不是全部使用Log4j。common-logging,就可以自行決定在自己的應(yīng)用中采用何種實現(xiàn),并跟所依賴的jar包統(tǒng)一起來。
          據(jù)common-logging的官方文檔,決定實現(xiàn)方式的策略如下:
          1.首先查找org.apache.commons.logging.Log屬性,該屬性可以在java代碼中設(shè)置,更常見的是在classpath下的common-logging.properties文件中進行設(shè)置
          2.在系統(tǒng)屬性中查找org.apache.commons.logging.Log
          3.如果類路徑中有l(wèi)og4j的jar包,則采用log4j實現(xiàn)
          4.如果jdk版本為1.4,采用Jdk14Logger
          5.采用common-logging提供的SimpleLog

          所以只要在classpath中加入Log4j的jar,Commons-logging 后臺使用的還是Log4j作為日志實現(xiàn)類。單獨使用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 實現(xiàn)方法:.
                               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作為實現(xiàn)類,但是要注意的是log4j.properties一定要在classpath中,之前一直不知道程序是如何去找到log4j.properties的,后來才發(fā)現(xiàn)是通過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 是日志記錄的優(yōu)先級,分為OFF,FATAL,ERROR,WA R N,INFO,DEBUG, 
          ALL或者您定義的級別.Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR, 
          WA R N,INFO,DEBUG.通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日 
          志信息的開關(guān).比如在這里定義了INFO級別,則應(yīng)用程序中所有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(每天產(chǎn)生一個日志文件), 
          org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件),  
          org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)  
          ③配置日志信息的格式(布局),其語法為:  
          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(包含日志產(chǎn)生的時間,線程,類別等等信息)  
          ④Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:  
          %m 輸出代碼中指定的消息  
          %p 輸出優(yōu)先級,即DEBUG,INFO,WA R N,ERROR,FATAL  
          %r 輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)  
          %c 輸出所屬的類目,通常就是所在類的全名  
          %t 輸出產(chǎn)生該日志事件的線程名  
          %n 輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"  
          %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,  
          比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921  
          %l 輸出日志事件的發(fā)生位置,包括類目名,發(fā)生的線程,以及在代碼中的行數(shù). 
          這里有2點要說明的,
          一是關(guān)于log4j.appender.R.File=example.log ,如果不給定絕對路徑的話,log文件的默認路徑是user.dir,可以通過System.getProperty("user.dir")來得到。
          而是關(guān)于%5p [%t] (%F:%L) - %m%n   5代表優(yōu)先級字符串占用幾個位置,%F代表文件名,%L代表行號。

          使用xml來充當配置,沒有去看過,所以也不了解,但是在網(wǎng)上也看到過依賴jar包里的log4j配置將自己應(yīng)用的log4j.properties屏蔽掉的問題,說是classpath中的jxls-core-0.9.5.jar中的log4j.xml,該配置優(yōu)先于他的log4j.properties,導(dǎo)致log4j.properties設(shè)置失效,不過不太了解是什么原因,但是有人給出了解決方案,

          手工重新 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 閱讀(772) 評論(0)  編輯  收藏 所屬分類: Technology


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 福安市| 万安县| 沙坪坝区| 长武县| 自贡市| 东辽县| 揭东县| 贡觉县| 遂川县| 滕州市| 富蕴县| 榕江县| 保山市| 宝坻区| 木兰县| 龙山县| 渑池县| 南通市| 赣榆县| 吐鲁番市| 镇雄县| 巴东县| 长岭县| 澎湖县| 五峰| 商水县| 邯郸县| 邓州市| 潞西市| 诏安县| 罗甸县| 牙克石市| 彰化市| 滨州市| 澄迈县| 吕梁市| 含山县| 宜章县| 广水市| 红原县| 峡江县|