log4j自定義appender實現,處理異常堆疊
阿新 • • 發佈:2018-12-23
在專案中需要自定義實現一個log4j的appender。根據log中MDC裡的資訊,構造日誌儲存的目錄結構。自定義實現log4j appender的方法已經介紹過了。主要是覆蓋AppenderSkeleton中的appender方法。
@Override
protected void append(LoggingEvent event) {
this .logEvent = event;
}
日誌內容的獲取和格式處理,通過Layout進行格式化
this .getLayout().format(event).getBytes( DEFAULT_CS )
這裡有個問題,一般情況下,我們常用的org.apache.log4j.PatternLayout是不會處理異常堆疊的。因為,其內部的方法,返回的是true。
public boolean ignoresThrowable () {
return true ;
}
在這種情況,如果你的日誌裡有異常物件,如logger.error(“錯誤資訊。”, e) 那麼e將會被忽略。這時候需要我們自己處理。處理方式如下:
if (layout .ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null ) {
int len = s. length;
for( int i = 0; i < len; i++) {
// 處理異常堆疊,比如記錄到日誌檔案中
}