Log4j——JAVA系統日誌(轉載)

轉載,原文網址: http://blog.csdn.net/wud_jiyanhui/article/details/6213443java

 

系統日誌的概念及做用web

日誌系統做爲一種應用程序服務,對於跟蹤調試、程序狀態記錄、崩潰數據恢都有着重要的做用
apache

經常使用Java日誌系統編程

Log4J服務器

最先的Java日誌框架之一,由Apache基金會發起,提供靈活而強大的日誌記錄機制。app

JDK1.4 LoggingFramework框架

繼Log4J以後,JDK標準委員會將Log4J的基本思想吸取到JDK當中,在JDK1.4中發佈了第一個日誌框架接口。函數

CommonsLoggingFramwork佈局

提供了統一的調用接口和配置方法,使得Java項目可以在Log4J和JDK1.4lLoggingFramework的使用上隨意進行切換

ui

Log4J的應用

Log4J是Apache的一個開源項目,經過使用Log4J,咱們能夠控制日誌信息輸送的目的地,輸出格式,經過設置日誌信息的級別還能夠細緻地控制日誌的生成過程.Log4j有三個主要的組件:Loggers(記錄器),Appenders(輸出源)和Layouts(佈局),這裏可簡單理解爲日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個組件能夠輕鬆的記錄信息的類型和級別,並能夠在運行時控制日誌輸出的樣式和位置

Log4J三個核心概念

公共類     Logger      負責處理日誌記錄的大部分操做。 

公共接口   Appender    負責控制日誌記錄的輸出。 

公共抽象類  Layout      負責格式化Appender的輸出

 

1.Logger日誌記錄器是日誌處理的核心組件

Loggers組件在此係統中被分爲五個級別:DEBUG、INFO、WARN、ERROR和FATAL。
這五個級別是有順序的,DEBUG<INFO<WARN<ERROR<FATAL,分別用來指定這條日誌信息的重要程度,明白這 一點很重要,這裏Log4j有一個規則:假設Loggers級別爲P,若是在Loggers中發生了一個級別Q比P高,則能夠啓動,不然屏蔽掉。假設你定 義的級別是info,那麼error和warn的日誌能夠顯示而比他低的debug信息就不顯示了。

2種特別級別,ALL  OFF

 

 

  1. Java程序舉例來講:  
  2. //創建Logger的一個實例,命名爲“com.foo”  
  3. Logger logger=Logger.getLogger("com.foo");//"com.foo"是實例  
  4. 進行命名,也能夠任意  
  5. //設置logger的級別。一般不在程序中設置logger的級別。通常在配置文  
  6. 件中設置。  
  7. logger.setLevel(Level.INFO);  
  8. Loggerbarlogger=Logger.getLogger("com.foo.Bar");  
  9. //下面這個請求可用,由於WARN>=INFO  
  10. logger.warn("Lowfuellevel.");  
  11. //下面這個請求不可用,由於DEBUG<INFO  
  12. logger.debug("Startingsearchfornearestgasstation.");  
  13. //命名爲“com.foo.bar”的實例barlogger會繼承實例“com.foo”的級  
  14. 別。所以,下面這個請求可用,由於INFO>=INFO  
  15. barlogger.info("Locatednearestgasstation.");  
  16. //下面這個請求不可用,由於DEBUG<INFO  
  17. barlogger.debug("Exitinggasstationsearch");  
 

這裏「是否可用」的意思是可否輸出Logger信息。

在對Logger實例進行命名時,沒有限制,能夠取任意本身感興趣的名字。通常狀況下建議以類的所在位置來命名Logger實例,這是目前來說比較有效的Logger命名方式。這樣可使得每一個類創建本身的日誌信息,便於管理。

好比:

static Logger logger=Logger.getLogger(ClientWithLog4j.class.getName());


2.Appender控制日誌輸出的位置

Log4j日誌系統容許把日誌輸出到不一樣的地方,如控制檯(Console)、文件(Files)、根據天數或者文件大小產生新的文件、以流的形式發送到其它地方等等。其語法表示爲:

org.apache.log4j.ConsoleAppender(控制檯)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件)

org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

 

SMTPAppender       發送郵件

SocketAppender     遠程日至服務器 發送日誌事件  loggingEvent 對象


配置時使用方式爲:

log4j.appender.appenderName=fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1=value1

…log4j.appender.appenderName.option=valueN

也能夠本身實現Appender接口, 這樣就爲日誌的輸出提供了至關大的便利。


3.Layout:格式化輸出日誌信息

Appender必須使用一個與之相關聯的 Layout,這樣才能知道怎樣格式化輸出日誌信息

Log4j具備三種類型的Layout

HTMLLayout

格式化日誌輸出爲HTML表格

PatternLayout

根據指定的轉換模式格式化日誌輸出

SimpleLayout

以一種很是簡單的方式格式化日誌輸出


 

使用配置文件配置Log4j

log4j.xml配置文件

log4j.properties配置文件

一般,咱們都提供一個名爲 log4j.properties的文件,在第一次調用到Log4J時,Log4J會在類路徑(../web-inf/class/固然也能夠放到其它任 何目錄,只要該目錄被包含到類路徑中便可)中定位這個文件,並讀入這個文件完成的配置。這個配置文件告訴Log4J以什麼樣的格式、把什麼樣的信息、輸出 到什麼地方。



二、Appenders



三、Layouts

有時用戶但願根據本身的喜愛格式 化本身的日誌輸出。Log4j能夠在Appenders的後面附加Layouts來完成這個功能。Layouts提供了四種日誌輸出樣式,如HTML樣 式、自由指定樣式、包含日誌級別與信息的樣式和包含日誌時間、線程、類別等信息的樣式等等。

其語法表示爲:

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

org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),

org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),

org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等信息)

配置時使用方式爲:

log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1=value1

log4j.appender.appenderName.layout.option=valueN

log4j基本編程方法


以上是從原理方面說明Log4j的使用方法,在具體Java編程使用Log4j能夠參照如下示例:

一、創建Logger實例:

語法表示:publicstaticLoggergetLogger(Stringname)

實際使用:staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName());

二、讀取配置文件:

得到了Logger的實例以後,接下來將配置Log4j使用環境:

語法表示:

BasicConfigurator.configure():自動快速地使用缺省Log4j環境。

PropertyConfigurator.configure(StringconfigFilename):讀取使用Java的特性文件編寫的配置文件。

DOMConfigurator.configure(Stringfilename):讀取XML形式的配置文件。

實際使用:

PropertyConfigurator.configure("ServerWithLog4j.properties");

三、插入日誌信息

完成了以上連個步驟之後,下面就能夠按日誌的不一樣級別插入到你要記錄日誌的任何地方了。

語法表示:

Logger.debug(Objectmessage);//調試信息

Logger.info(Objectmessage);//通常信息

Logger.warn(Objectmessage);//警告信息

Logger.error(Objectmessage);//錯誤信息

Logger.fatal(Objectmessage);//致命錯誤信息

實際使用:

logger.info("ServerSocketbeforeaccept:"+server);

4.log4j配置文件

在實際編程時,要使Log4j真 正在系統中運行事先還要對配置文件進行定義。定義步驟就是對Logger、Appender及Layout的分別使用。Log4j支持兩種配置文件格式, 一種是XML格式的文件,一種是javaproperties(key=value)【Java特性文件(鍵=值)】。

-----------------------------------------------------------------------------------------

打印參數: Log4J採用相似C語言中的printf函數的打印格式格式化日誌信息,以下:

      %m 輸出代碼中指定的消息 

  %p 輸出優先級,即DEBUG,INFO,WARN,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 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 )

相關文章
相關標籤/搜索