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

          主站蜘蛛池模板: 井陉县| 福清市| 泰兴市| 老河口市| 南平市| 大理市| 定陶县| 平罗县| 黎城县| 张家港市| 应城市| 宁陵县| 益阳市| 荣昌县| 惠来县| 五河县| 苍山县| 阿尔山市| 临漳县| 嵩明县| 紫金县| 通辽市| 韩城市| 东平县| 紫阳县| 淮北市| 万宁市| 呼图壁县| 监利县| 望谟县| 华容县| 班戈县| 呼伦贝尔市| 昆明市| 尉犁县| 库尔勒市| 兴山县| 海阳市| 武冈市| 招远市| 丰城市|