Log4j日誌管理系統簡單使用說明 (轉)

amyz發表於2007-11-07
Log4j日誌管理系統簡單使用說明 (轉)[@more@]

Log4j日誌管理簡單使用說明 

  Log4j有三個主要的:Loggers,Appenders和Layouts,這裡可簡單理解為日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個元件可以輕鬆的記錄資訊的型別和級別,並可以在執行時控制日誌輸出的樣式和位置。下面對三個元件分別進行說明:

1、 Loggers

  Loggers元件在此係統中被分為五個級別:DE、INFO、WARN、ERROR和AL。這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,明白這一點很重要,這裡Log4j有一個規則:假設Loggers級別為P,如果在Loggers中發生了一個級別Q比P高,則可以啟動,否則遮蔽掉。

舉例來說:

//建立Logger的一個例項,命名為“com.foo”

Logger  logger = Logger.getLogger("com.foo");

//設定logger的級別。通常不在程式中設定logger的級別。一般在中設定。

logger.setLevel(Level.INFO);

Logger barlogger = Logger.getLogger("com.foo.Bar");

//下面這個請求可用,因為WARN >= INFO

logger.warn("Low fuel level.");

//下面這個請求不可用,因為DEBUG < INFO

logger.debug("Starting search for nearest gas station.");

//命名為“com.foo.bar”的例項barlogger會繼承例項“com.foo”的級別。因此,下面這個請求可用,因為INFO >= INFO

barlogger.info("Located nearest gas station.");

//下面這個請求不可用,因為DEBUG < INFO

barlogger.debug("Exiting gas station search"); 

這裡“是否可用”的意思是能否輸出Logger資訊。 

  在對Logger例項進行命名時,沒有限制,可以取任意自己感興趣的名字。一般情況下建議以類的所在位置來命名Logger例項,這是目前來講比較有效的Logger命名方式。這樣可以使得每個類建立自己的日誌資訊,便於管理。比如:

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

2、 Appenders

  禁用與使用日誌請求只是Log4j其中的一個小小的地方,Log4j日誌系統允許把日誌輸出到不同的地方,如控制檯(Console)、檔案(Files)、根據天數或者檔案大小產生新的檔案、以流的形式傳送到其它地方等等。

其語法表示為:

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


org.apache.log4j.FileAppender(檔案),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案),org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)

配置時使用方式為:

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

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN

這樣就為日誌的輸出提供了相當大的便利。

3、 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的使用方法,在具體Java使用Log4j可以參照以下示例:
1、 建立Logger例項:
  語法表示:public static Logger getLogger( String name)
  實際使用:static Logger logger = Logger.getLogger  (ServerWithLog4j.class.getName ()) ;
2、 讀取配置檔案:
  獲得了Logger的例項之後,接下來將配置Log4j使用環境:
  語法表示:
  BasicConfigurator.configure():自動地使用預設Log4j環境。
  PropertyConfigurator.configure(String configFilename):讀取使用Java的特性檔案編寫的配置檔案。
  Configurator.configure(String filename):讀取形式的配置檔案。
  實際使用:PropertyConfigurator.configure("ServerWithLog4j.properties");
3、 插入日誌資訊
  完成了以上連個步驟以後,下面就可以按日誌的不同級別插入到你要記錄日誌的任何地方了。
  語法表示:
  Logger.debug( message);
  Logger.info(Object message);
  Logger.warn(Object message);
  Logger.error(Object message);
  實際使用:logger.info("ServerSocket before accept: " + server);
 
  在實際程式設計時,要使Log4j真正在系統中執行事先還要對配置檔案進行定義。定義步驟就是對Logger、Appender及Layout的分別使用,具體如下:
1、 配置根Logger,其語法為:
  log4j.Logger = [ level ] , appenderName, appenderName, …
這裡level指Logger的優先順序,appenderName是日誌資訊的輸出地,可以同時指定多個輸出地。如:log4j.rootLogger= INFO,A1,A2
2、 配置日誌資訊輸出目的地,其語法為:
  log4j.appender.appenderName = fully.qualified.name.of.appender.class
  可以指定上面所述五個目的地中的一個。
3、 配置日誌資訊的格式,其語法為:
  log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  這裡上面三個步驟是對前面Log4j元件說明的一個簡化;下面給出一個具體配置例子,在程式中可以參照:
  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 %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
  這裡需要說明的就是日誌資訊格式中幾個符號所代表的含義:
  -X號: X資訊輸出時左對齊;
  %p: 日誌資訊級別
  %d{}: 日誌資訊產生時間
  %c: 日誌資訊所在地(類名)
  %m: 產生的日誌具體資訊
  %n: 輸出日誌資訊換行
 
根據上面的日誌格式,某一個程式的輸出結果如下:
0  INFO  -06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981165/,如需轉載,請註明出處,否則將追究法律責任。

相關文章