如何用log4j輸出多個自定義日誌文件
log4j輸出多個自定義日誌文件
如果在實際應用中需要輸出獨立的日誌文件,怎樣才能把所需的內容從原有日誌中分離,形成單獨的日誌文件呢?
先看一個常見的erties文件,它是在控制檯和文件中記錄日誌:
複製代碼 代碼如下:
Logger=DEBUG, stdout, logfile
ut=oleAppender
ut=ernLayout
ersionPattern=%d %p [%c] - %m%n
ile=ingFileAppender
=log/
ileSize=128MB
ackupIndex=3
ut=ernLayout
ersionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一類中需要輸出多個日誌文件呢?其實道理是一樣的,先在中定義:
複製代碼 代碼如下:
private static Log logger1 = og("mylogger1");
private static Log logger2 = og("mylogger2");
erties中配置如下:
複製代碼 代碼如下:
gger1=DEBUG,test1
1=Appender
=log/
ut=ernLayout
ersionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
gger2=DEBUG,test2
2=Appender
=log/
ut=ernLayout
ersionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日誌要使用不同的logger(如輸出到的.要用("abc"))。
還有一個問題,就是這些自定義的日誌默認是同時輸出到Logger所配置的日誌中的,如何能只讓它們輸出到自己指定的日誌中呢?別急,這裏有個開關:
tivity. mylogger1 = false
它用來設置是否同時輸出到Logger所配置的日誌中,設爲false就不會輸出到其它地方了。
但是這種方式有個小缺陷,那就是打印的日誌中類名只能是mylogger或者mylogger2。
2 動態配置路徑
若程序需要的日誌路徑需要不斷的變化,而又不可能每次都去改配置文件,此時可以利用環境變量來解決。
log4j的配置如下:
複製代碼 代碼如下:
Logger=DEBUG,INFOLOG,DEBUGLOG
#info log
LOG =yRollingFileAppender
= ${}/${}
Pattern=-MM-dd
shold=INFO
ut=ernLayout
ersionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
GLOG =ingFileAppender
= ${}/${}
shold=DEBUG
ileSize=128MB
ackupIndex=3
ut=ernLayout
ersionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此時,在使用log打印日誌之前,需要利用System定義日誌的輸出路徑和文件名的環境變量:
複製代碼 代碼如下:
roperty(“”, logDir);
roperty(“”, infoLogFileName);
roperty(“”, debugLogFileName);
附:Pattern參數的格式含義
%c 輸出日誌信息所屬的類的全名
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2013-8-19- 22:10:28
%f 輸出日誌信息所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
%m 輸出代碼中指定的信息,如log(message)中的message
%n 輸出一個回車換行符,Windows平臺爲“/r/n”,Unix平臺爲“/n”
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則爲DEBUG,依此類推
%r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名