Log4j使用總結

jopen 12年前發布 | 842 次閱讀 Lightbeam

 Log4j使用總結 關鍵字: log4j

一、介紹
Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務 器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。
Log4j由三個重要的組件構成:日志信息的優先級,日志信息的輸出目的地,日志信息的輸出格式。日志信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;而輸出格式則控制了日志信息的顯 示內容。

二、配置文件
其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環境。但是,使用配置文件將使您的應用程序更加靈活。
Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。下面我們介紹使用properties格式做為配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

  1. 配置根Logger,其語法為:
    log4j.rootLogger = [ level ] , appenderName, appenderName, …
    其中,level 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定 義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。
    appenderName就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。

  2. 配置日志信息輸出目的地Appender,其語法為:
    log4j.appender.appenderName = fully.qualified.name.of.appender.class
    log4j.appender.appenderName.option1 = value1

    log4j.appender.appenderName.optionN = valueN
    其中,Log4j提供的appender有以下幾種:
    org.apache.log4j.ConsoleAppender(控制臺),
    org.apache.log4j.FileAppender(文件),
    org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
    org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
    org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
    (1).ConsoleAppender選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    Target=System.err:默認情況下是:System.out,指定輸出控制臺
    (2).FileAppender 選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    (3).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: 每分鐘
    (4).RollingFileAppender 選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
    MaxBackupIndex=2:指定可以產生的滾動文件的最大數。

  3. 配置日志信息的布局,其語法為:
    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(包含日志產生的時間、線程、類別等等信息)

    4、輸出格式設置
    在配置文件中可以通過log4j.appender.A1.layout.ConversionPattern設置日志輸出格式。
    參數:
    %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: 輸出日志消息產生時所在的文件名稱
    %L: 輸出代碼中的行號
    %m: 輸出代碼中指定的消息,產生的日志具體信息
    %n: 輸出一個回車換行符,Windows平臺為”\r\n”,Unix平臺為”\n”輸出日志信息換行
    可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
    1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。
    2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,”-”號指定左對齊。
    3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
    4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊交遠銷出的字符截掉。

    三、在程序中的使用
    在程序中使用Log4j之前,首先要將commons-logging.jar和logging-log4j-1.2.9.jar導入到classpath中,并將log4j.properties放于src根目錄中。接下來就可以使用了。

    1.得到記錄器
    使用Log4j,第一步就是獲取日志記錄器,這個記錄器將負責控制日志信息。其語法為:
    public static Logger getLogger( String name),
    通過指定的名字獲得記錄器,如果必要的話,則為這個名字創建一個新的記錄器。Name一般取本類的名字,比如:
    static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
    注:推薦使用commons-logging結合log4j進行日志記錄
    private static Log logger = LogFactory.getLog(Yourclass.class);

    2.插入記錄信息(格式化日志信息)
    當上兩個必要步驟執行完畢,您就可以輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:
    Logger.debug ( Object message ) ;
    Logger.info ( Object message ) ;
    Logger.warn ( Object message ) ;
    Logger.error ( Object message ) ;

    四、Log4j比較全面的配置
    LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置文件實現了輸出到控制臺、文件、回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。擇其一二使用就夠用了。</span></span></p>

    Java代碼  

    1. log4j.rootLogger=DEBUG,CONSOLE,A1,im   
    2. log4j.addivity.org.apache=true  
    3. # 應用于控制臺   
    4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender   
    5. log4j.appender.Threshold=DEBUG   
    6. log4j.appender.CONSOLE.Target=System.out   
    7. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout   
    8. log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
    9. #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n   
    10. #應用于文件   
    11. log4j.appender.FILE=org.apache.log4j.FileAppender   
    12. log4j.appender.FILE.File=file.log   
    13. log4j.appender.FILE.Append=false  
    14. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout   
    15. log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
    16. # Use this layout for LogFactor 5 analysis   
    17. # 應用于文件回滾   
    18. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender   
    19. log4j.appender.ROLLING_FILE.Threshold=ERROR   
    20. log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用變量${java.home}、rolling.log   
    21. log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆蓋   
    22. log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸   
    23. log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //備份數   
    24. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout   
    25. log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
    26. #應用于socket   
    27. log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender   
    28. log4j.appender.SOCKET.RemoteHost=localhost   
    29. log4j.appender.SOCKET.Port=5001  
    30. log4j.appender.SOCKET.LocationInfo=true  
    31. # Set up for Log Facter 5  
    32. log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout   
    33. log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n   
    34.  
    35. # Log Factor 5 Appender   
    36. log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender   
    37. log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000  
    38. # 發送日志給郵件   
    39. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender   
    40. log4j.appender.MAIL.Threshold=FATAL   
    41. log4j.appender.MAIL.BufferSize=10  
    42. log4j.appender.MAIL.From=web@www.wuset.com   
    43. log4j.appender.MAIL.SMTPHost=www.wusetu.com   
    44. log4j.appender.MAIL.Subject=Log4J Message   
    45. log4j.appender.MAIL.To=web@www.wusetu.com   
    46. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout   
    47. log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
    48. # 用于數據庫   
    49. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender   
    50. log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test   
    51. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver   
    52. log4j.appender.DATABASE.user=root   
    53. log4j.appender.DATABASE.password=   
    54. log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (’[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n’)   
    55. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout   
    56. log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
    57.   
    58. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender   
    59. log4j.appender.A1.File=SampleMessages.log4j   
    60. log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’   
    61. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout   
    62. #自定義Appender   
    63. log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender   
    64. log4j.appender.im.host = mail.cybercorlin.net   
    65. log4j.appender.im.username = username   
    66. log4j.appender.im.password = password   
    67. log4j.appender.im.recipient = corlin@cybercorlin.net   
    68. log4j.appender.im.layout=org.apache.log4j.PatternLayout   
    69. log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!