當前位置

首頁 > 語文基礎 > 日誌 > 如何用log4j輸出多個自定義日誌文件

如何用log4j輸出多個自定義日誌文件

推薦人: 來源: 閱讀: 9.44K 次

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 輸出產生該日誌事件的線程名