posts - 325,  comments - 25,  trackbacks - 0
           

          1.      介紹

          1.1.      Log4j 是什么?

          Log4jApache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,能夠更加細致地控制日志的生成過程,而這些可以通過一個配置文件來靈活地進行配置,不需要修改應用的代碼。

          1.2.      構成Log4j三大類組件

          (1) Logger : 負責輸出信息日志信息,并能夠對日志信息過濾,確定哪些日志信息輸出,哪些信息被忽略。

          (2) Appender : 指定日志輸出到什么地方,可以是控制臺、文件或網絡設備等等。

          (3) Layouts : 加在Appender后面用以實現格式化輸出日志的內容。

          2. Log4j的設置

          第一步:加入log4jjarlib下。

          第二步:在CLASSPATH下建立log4j.properties或XML格式的配置文件。

          第三步:導入所有需的commongs-logging類:
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          第四步:在自己的類中定義一個org.apache.commons.logging.Log類的私有靜態類成員:
          private final Log log = LogFactory.getLog(getClass());
          LogFactory.getLog()
          方法的參數使用的是當前類的class

          步:使用org.apache.commons.logging.Log類的成員方法輸出日志信息:

          例如:if (log.isDebugEnabled())
          {log.debug("Test log4j!");}

          3. Log4j的配置文件

          3.1 Log4j輸出日志信息的優先級

          Log4j輸出日志信息的級別OFFFATALERRORWARNINFODEBUGALL或者自定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERRORWARNINFODEBUG。通過在這里定義的級別,可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別,只有等于及高于這個級別的才進行處理,則應用程序中所有DEBUG級別的日志信息將不被打印出來。ALL:打印所有的日志,OFF:關閉所有的日志輸出。

          3.2 Log4j配置文件的詳細介紹

          Log4j支持兩種配置文件格,一種是XML格式的文件,一種是Java特性文件log4j.properties(鍵=值)。下面將介紹使用log4j.properties文件作為配置文件的方法:

          ①、              配置根Logger
          Logger
          負責處理日志記錄的大部分操作。
          其語法為:
          log4j.rootLogger = [ level ] , appenderName, appenderName, …
          其中,level 是日志記錄的優先級

          ②、              配置日志信息輸出目的地 Appender
          Appender
          負責控制日志記錄操作的輸出。
          其語法為:
          log4j.appender.appenderName = fully.qualified.name.of.appender.class
          log4j.appender.appenderName.option1 = value1

          log4j.appender.appenderName.optionN = valueN
          這里的appenderName為在①里定義的,可任意起名。
          其中,Log4j提供的appender有以下幾種:
          org.apache.log4j.ConsoleAppender
          (控制臺),
          org.apache.log4j.FileAppender
          (文件),
          org.apache.log4j.DailyRollingFileAppender
          (每天產生一個日志文件),
          org.apache.log4j.RollingFileAppender
          (文件大小到達指定尺寸的時候產生一個新的文件),可通過log4j.appender.R.MaxFileSize=100KB設置文件大小,還可通過log4j.appender.R.MaxBackupIndex=1設置為保存一個備份文件。
          org.apache.log4j.WriterAppender
          (將日志信息以流格式發送到任意指定的地方)
          例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
          定義一個名為stdout的輸出目的地,ConsoleAppender為控制臺。
          ③、配置日志信息的格式(布局)Layout
          Layout
          負責格式化Appender的輸出。
          其語法為:
          log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
          log4j.appender.appenderName.layout.option1 = value1

          log4j.appender.appenderName.layout.optionN = 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
          輸出優先級,即DEBUGINFOWARNERRORFATAL
          %r
          輸出自應用啟動到輸出該log信息耗費的毫秒數
          %c
          輸出所屬的類目,通常就是所在類的全名
          %t
          輸出產生該日志事件的線程名
          %n
          輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n
          %d
          輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:20021018 221028921
          %l
          輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
          4.Logger組件的繼承性

          Log4j中定義的Logger可以有繼承關系,Log4j提供了一個root Logger,它是所有Logger的”根”,其它的Logger都會繼承root Logger.Logger 之間的繼承關系是通過名稱體現的,例如:log4j.logger.helloappLogger.childLogger的名稱是在log4j.logger.helloappLogger之后加符號“.”定義的,則childLogger繼承helloappLogger.

          Logger組件的繼承關系有以下特點:

               如果子Logger沒有定義日志級別,則繼承父Logger的日志級別。

               如果子Logger定義了日志級別,則不會繼承父Logger的日志級別。

                默認情況,子Logger會繼承Logger的所有Appender,反它們加入到自己的Appender中。

           

          附錄 A Log4j配置相對路徑實現日志記錄

          Log4j配置相對路徑實現日志記錄有三種辦法:

          ①、              用相代替絕對

          log4jFileAppender本身就有這樣的機制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log其中${WORKDIR}/個變量,System Property中的WORKDIR代替。這樣,我就可以在log4j配置文件之前,先用System.setProperty置好根路

          ②、             可以使用環境變量

          log4j.appender.R=org.apache.log4j.RollingFileAppender
          log4j.appender.R.File=${catalina.base}/logs/logs_tomcat.log
          log4j.appender.R.MaxFileSize=10KB

          ③、             采用了動態改變日志路徑方法來實現相對路徑保存日志文件

          代碼:

          public class Log4jInit extends HttpServlet {   

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

               public Log4jInit() {        }   

               public void init(ServletConfig config) throws ServletException     {   

          String prefix = config.getServletContext().getRealPath("/");       String file = config.getInitParameter("log4j");   

           String filePath = prefix + file;  

           Properties props = new Properties();   

                   try {   

                    FileInputStream istream = new FileInputStream(filePath);   

                        props.load(istream);   

                        istream.close();   

                        String logFile = prefix + props.getProperty("log4j.appender.file.File");//設置路徑   

                       props.setProperty("log4j.appender.file.File",logFile);                

                   PropertyConfigurator.configure(props);//裝入log4j配置信息   

                  } catch (IOException e) {   

            toPrint("Could not read configuration file [" + filePath + "].");   toPrint("Ignoring configuration file [" + filePath + "].");                return;            }   

              }   

              public static void toPrint(String content) {   

              System.out.println(content);   

              }   

             }   

          (2).Web.xml中的配置

          代碼

          1. <servlet>       
          2.   <servlet-name>log4j-init</servlet-name>       
          3.   <servlet-class>Log4jInit</servlet-class>  
          4.   <init-param>  
          5.     <param-name>log4j</param-name>  
          6.     <param-value>WEB-INF/classes/log4j.properties</param-value>        
          7.   </init-param>       
          8.     <load-on-startup>1</load-on-startup>  
          </servlet>
          posted on 2008-06-01 14:11 長春語林科技 閱讀(4940) 評論(0)  編輯  收藏 所屬分類: utiljava
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 酉阳| 蕲春县| 永吉县| 韶山市| 鲁甸县| 岢岚县| 固镇县| 镇赉县| 云和县| 二连浩特市| 保康县| 神农架林区| 子长县| 孝感市| 正镶白旗| 阿鲁科尔沁旗| 秦安县| 巩义市| 台湾省| 桐城市| 高雄县| 洛宁县| 大竹县| 邳州市| 襄汾县| 光山县| 平远县| 科技| 兰西县| 临邑县| 思南县| 达拉特旗| 龙山县| 赤壁市| 内乡县| 黑水县| 那曲县| 来宾市| 长岛县| 海盐县| 榆中县|