首頁  >  文章  >  Java  >  Log4j的基本使用方法介紹

Log4j的基本使用方法介紹

零下一度
零下一度原創
2017-06-28 14:40:111943瀏覽

簡單設定

#指定logger
# 配置Logger组件 
# 设定Log4j的日志级别(error warn info  debug)
# 输出目的地(Console, logfile是appender的名字,是自己定义的,后面才赋予具体的含义)
log4j.rootLogger=debug, Console, logfile
###################################################################################################################
#指定appender(目的地)
#设定Logger的Console(appender的名字)的Appender类型为控制台输出
#org.apache.log4j.ConsoleAppender 表明 Console是控制台输出
log4j.appender.Console=org.apache.log4j.ConsoleAppender

#输出的格式
#设定Console的Appender布局Layout
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式)包含选项:
#                     ConversionPattern=%m%n :指定怎样格式化指定的消息
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#2009-09-29 07:30:43,265 INFO com.itcast.web.controller.SearchCdServlet.doGet() - e
log4j.appender.Console.layout.ConversionPattern=%d %p %c.%M() - %m%n

###################################################################################################################
#设定Logger的logfile(appender的名字)的Appender类型为文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.logfile=org.apache.log4j.RollingFileAppender

#设定文件的输出路径(指定文件的名字和路径,tomcat的启动路径)
log4j.appender.logfile.File=../logs/logstrore.log

#设定后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logstrore.log.1文件
log4j.appender.logfile.MaxFileSize=2048KB

#Keep three backup files.指定可以产生的滚动文件的最大数
log4j.appender.logfile.MaxBackupIndex=4#设定logfile的Appender布局Layout
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p %c.%M() - %m%n
###################################################################################################################

 

#Log4J##「簡介 

Log4J是Apache的一個開放原始碼項目,它是一個日誌操作包,透過使用Log4J,可以指定日誌資訊輸出的目的地,例如控制台、檔案、CUI元件、NT的事件記錄器;還可以控制每一條日誌輸出格式。此外,透過定義日誌資訊的級別,能夠非常細緻地控制日誌的輸出,最令人感興趣的是,這些功能可以透過一個設定檔來靈活進行配置,而不需要修改應程式碼。

在應用程式中輸出日誌有3個目的:

l  監視程式碼中變數的變化情況,把資料週期性記錄到檔案中供其他應用進行統計分析工作

l  追蹤程式碼執行時間軌跡,作為日後審計的依據

l  擔當整合開發環境中的偵錯器的作用,向文件和控制台列印程式碼的偵錯資訊

#要在程式中輸出日誌,最普通的做法就是在程式碼中嵌入語句,這些列印語句可以把日誌輸出到控制台或檔案中,比較好的做法就是建構一個日誌操作類別來封裝此類操作,而不是讓一系列的列印語句充斥程式碼的主體。

 

在強調可重複使用元件的今天,除了自己從頭到尾開發一個可重複使用的日誌操作類別名,Apache為我們提供了一個強而有力的現成的日誌操作包Log4J。
Log4J主要由三大元件構成:

l  Logger:負責產生日誌,並且能夠對日誌資訊進行分類篩選,通俗地講就是決定什麼日誌資訊應該輸出,什麼日誌訊息應該忽略

l  Appender:定義了日誌資訊輸出的目的地,指定日誌資訊應該被輸出到什麼地方,這些地方可以是控制台、檔案、網路裝置等

l Layout: 指定日誌訊息的輸出格式

這個3個元件協同工作,使得開發者能夠依據日誌資訊類別記錄訊息,並能夠在程式運行期間,控制日誌資訊的輸出格式以及日誌存放地點。

一個Logger可以有多個Appender,這表示日誌資訊可以同時輸出到多個裝置上,每個Appender都對應一個Layout,Layout決定了輸出日誌資訊的格式。

假定根據實際需要,要求程式中的日誌資訊既能輸出到程式運行的控制台下,又能輸出到指定的檔案中,並且當日誌資訊輸出到控制台時SimplLayout佈局,當日誌資訊輸出到檔案時PatternLayout佈局,此時Logger、Appender和Layout3個元件的關聯如圖

 

 控制台(Console)
 

Appender元件(指定輸出目的)


Log4J的Appender元件決定將日誌資訊輸出到什麼地方。日前Log4J的Appender支援將日誌訊息輸出到以下的目的:

##l  ###GUI元件#########一個logger可以同時對應多個Appender,也就是說,一個Logger的日誌資訊可以同時輸出到多個目的地,例如:要為rootLogger配置兩個Appender; 一個是file,一個是console,則可以採用以下設定碼:##################log4j.rootLogger =WARN,file,console          rootLogger  設定日誌等級、輸出目的;######log4j.appender.file=org.apache.log4jRollingFileAppender###      log4j.appender.file=log.txt######log4j.appender.console=org.apache.log4j.ConsoleAppender################

 Layout元件
Layout元件用來決定日誌的輸出格式,它有下列幾種型別

l  org.apache.log4j.HTMLLayout (以HTML表格形式佈局)

l  org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)

l  org.apache.log4j.SimpleLayout(包含日誌資訊等級與資訊#l  org.apache.log4j.SimpleLayout(包含日誌資訊等級與資訊字串)

l  org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒和類別等資訊)

 

 

Log4j的基本使用方法

在應用程式中使用Log4J,先在一個設定檔中設定Log4j的各個元件,然後就可以在程式中透過Log4JAPI來操作日誌

 

定義設定檔
Log4J由3個重要的元件構成:Logger、Appender和layout。 Log4J支援在程式中以程式設計的方式設定這些元件,也支援透過設定檔來配置元件,後者更為靈活。

Log4J支援兩種設定檔格式,一種是XML格式,一種是Java屬性文件,


1. 設定Logger元件
其文法為:
      log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

範例:

    log4j.rootLogger =WARN,file,console


       level : 是日誌記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或您定義的等級。

Log4j建議只使用四個級別,優先權從高到低分別是ERROR>WARN>INFO>DEBUG。透過在這裡定義的級別,您可以控製到應用程式中相應級別的日誌資訊的開關。比如在這裡定 義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被列印出來。

appenderName:就是指定日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。

All:列印所有日誌。

Off:關閉所有的日誌。
     例如:log4j.rootLogger=info,A1,B2,C3

 

 

2. 配置Appender 元件

 

其文法為:
     log4j.appender.appenderName =fully.qualified.name.of.appender.class.

範例:

   log4j.appender.console=org.apache.log4j .ConsoleAppender


    "fully.qualified.name.of.appender.class"
可以指定下列五個目的地中的一個
         # 1.org.apache.log4j.ConsoleAppender(主機)
##    2.org.apache.log4j.FileAppender(文件)【只能把日誌輸出一個文件,不推薦】
          3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
          4.org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
          5.org.apache.log4j.WriterAppender(將日誌資訊以串流格式傳送至任意指定的地方)

 

#A.ConsoleAppender選項    Threshold=WARN:指定記錄訊息的最低輸出層級。
     ImmediateFlush=true:預設值是true,意思是所有的訊息都會立即被輸出。
     Target=System.err:預設為:System.out,指定輸出控制台

B.FileAppender

Threshold=WARN:指定日誌訊息的輸出最低層次。

ImmediateFlush=true:預設值是true,意謂著所有的訊息都會立即被輸出。

File=mylog.txt:指定訊息輸出到mylog.txt檔案。
     Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆寫

指定的檔案內容。
C.DailyRollingFileAppender選項
#      Threshold=WARN:指定日誌訊息的輸出最低層級。
       ImmediateFlush=true:預設值是true,意謂著所有的訊息都會立即被輸出。
       File=mylog.txt:指定訊息輸出至mylog.txt檔案。
       Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆寫指定

#的檔案內容。
      DatePattern='.'yyyy-ww:每週捲動文件,即每週產生新的文件。當然也可

以指定按月、週、天、時和分。即對應的格式如下:
                    1)'.'yyyy-MM: 每月
                    2)'.'yyyy-ww: 每週
                    3)'.'yyyy-MM-dd: 每天
                    4)'.'yyyy-MM-dd-a: 每天兩次
                    5)'.'yyyy-MM-dd-HH: 每小時
                    6)'.'yyyy-MM-dd-HH-mm: 每分鐘
#D.RollingFileAppender 選項
           Threshold=WARN:指定日誌訊息的輸出最低層次。
            ImmediateFlush=true:預設值是true,意圖所有的訊息都會立即被輸出。
            File=mylog.log:指定訊息輸出至mylog.txt檔案。
            Append=false:預設值為true,即將訊息增加到指定檔案中,false指將訊息覆蓋指

#設定的檔案內容。
            MaxFileSize=100KB: 字尾可以是KB, MB 或是 GB. 在日誌檔案到達該大小

時,將會自動捲動,即將原來的內容移到mylog.log.1檔案。
            MaxBackupIndex=2:指定可產生的捲動檔案的最大數。

3、設定日誌資訊的格式

其語法為:
  1)log4j .appender.appenderName.layout=fully.qualified.name.of.layout.class
#        "fully.qualified.name.of.layout.class" ##可指定下方4

個格式中的一個

範例:log4j.appender.console.layout=org.apache.log4j.PatternLayout

      log4j.appender.console.layout.ConversionPattern=%d %p %c.%M()-%m%n


               1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局)包含選項:

LocationInfo=true:預設值是false,輸出java檔案名稱和行號
             Title=my app file: 預設值是 Log4J Log Messages.

###         2.org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)包含選項:###

ConversionPattern=%m%n :指定怎樣格式化指定的訊息。

         3.org.apache.log4j.SimpleLayout(包含日誌資訊的等級與資訊字串)
         4.org。 %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
      日誌訊息格式中幾個符號所代表的意思:
   -X號: X資訊輸出時左對齊;         %p: 輸出日誌資訊優先級,即DEBUG,INFO,WARN,ERROR,FATAL,         %d: 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,例如:  %d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日22: 10:28,921
         %r: 輸出自應用程式啟動到輸出該log資訊所耗費的毫秒數
        %c: 輸出日誌資訊所屬的類別目,通常是所在類別的全名
      #   %t: 輸出產生此日誌事件的執行緒名稱所產生該日誌事件的執行緒名#         %l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類別目名、發生的線程, 以及在程式碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
         %x: 輸出與目前執行緒相關聯的NDC(嵌套診斷環境),特別用到像java servlets這樣的多客戶多執行緒的應用中。
        %%: 輸出一個"%"字元
        %F: 輸出日誌訊息產生時所在的檔案名稱
      訊息,產生的日誌具體資訊
        %n: 輸出一個回車換行符,Windows平台為"\r\n",Unix平台為"\n"輸出日誌訊息換行

%M  代表方法的名稱
        
 

#可以在

%
與模式字元之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:         1)%20c:以20中指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20。           2)%-20c:指定輸出category的名稱,且最小的寬度是20,而category的名稱小於20的話,"-"號指定為左對齊。           3)%.30c:指定為輸出category的名詞,而最大的寬度是30,而如果category的名稱大於30的話,就會將左邊多出的字元截斷,但小於30的話也不會有空格。            4)%20.30c:如果category的名稱小於20就補空格,且右對齊,如果其名稱長於30字符,就從左邊交遠銷出的字符截掉。
在程式中存取Log4J,需要用到Log4J的JAR檔案。
在程式中使用Log4J包含以下程序:

l  取得日誌記錄器

l  讀取設定文件,設定Log4J環境


l  輸出日誌資訊

 

 

在進入學習Log4J之前,我們要先了解兩個通用日誌套件中的常用介面LogFactory和Log,以下分別介紹它們的用法。

Log介面

通用日誌包把日誌訊息分成6種等級:FATAL(致命的)、ERROR(錯誤)、WARN(警告)、INFO(訊息)、DEBUG(調試)和TRACE(細節)。其中FATAL等級最高,TRACE等級最低。通用日誌包採用日誌等級機制,可靈活的控制輸出的日誌內容。

org.apache.commons.logging.Log介面代表日誌器,它提供了一組輸出日誌的方法:

l  fatal(Object message): 輸出FATAL等級的日誌訊息。

l  error(Object message): 輸出ERROR等級的日誌訊息。

l  ……

l  trace(Object message): 輸出TRACE等級的日誌訊息。

    針對上述輸出日誌的方法,只有當它輸出日誌的等級大於或等於為日誌其所設定的日誌等級時,這個方法才會真正執行。 例如,如果日誌器的日誌等級為WARN,那麼在程式中,它的fatal()、error()和warn()方法會被執行,而info()、debug()和trace()方法不會被執行

Log介面也提供了一組判斷是否允許輸出特定等級的日誌訊息的方法:

l  isFatalEnabled()

l  isErrorEnabled()

#l  …

l  isTraceEnabled()

在程式輸出某一層級的日誌訊息之前,提倡先呼叫上述方法來判斷該層級的日誌是否允許輸出,這有助於提高應用的性能。例如以下程式碼先把日誌訊息加入StringBuffer中,最後在呼叫日誌器的debug()方法輸出日誌:

StringBuffer buf = new StringBuffer();

buf.append(“ Login Successsul - ”);

buf.append(“Name:”);

buf.append(username);

log.debug(buf.toString() );

對於以上程式碼,如果日誌器實際上不允許輸出DEBUG層級的日誌,那麼執行日誌器的debug()方法不會輸出任何訊息,此時向StringBuffer中新增訊息的一大串操做都將是多餘的。為了提升效能,可以合理的使用isDebugEnabled()方法,避免套用執行多餘的動作:

if(log.isDebugEnabled){

StringBuffer buf = new StringBuffer();

buf.append(“Login Successsul - ”);

buf.append(“Name:”);

buf.append(username);

log.debug(bug.toString());

}

#(二)LogFactory接口

org.apache.commons.logging.LogFactory介面提供了兩個獲得日誌器實例的靜態方法:

public static Log getLog(String name)throws LogConfigurationException;

public static Log getLog(Class class) throws LogConfigurationException;

第一個getLog()方法以name參數作為日誌器的名字;第二個getLog()方法以class參數指定的類別的名字作為日誌器的名字,以下是第二個getLog()方法的實作方式:

public static Log getLog(Class class) throws LogConfigurationException{

getLog(class.getName);     //call getLog(String name)

}

 小結

Log4J主要由3大元件構成:Logger、Appender和Layout。 Logger控制日誌資訊的輸出;Appender決定日誌資訊的輸出目的地;Layout決定日誌資訊的輸出格式。 Log4J允許使用者在設定檔中靈活地配置這些元件。在程式中使用Log4J非常方便,只要先取得日誌記錄器,然後讀取設定檔並設定Log4J環境,接下來就可以在程式中任何需要輸出日誌的地方,呼叫Logger類別的適當方法來產生日誌。

以上是Log4j的基本使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn