logback自定義appender讀取xml中的配置
logback之類的日誌框架默認將日誌以文本的形式保存到磁盤上。
如果我們希望將日誌以其他方式保存,比如通過http將日誌發送到別的位置,方法是自定義appender
<appender name="httpAppender" class="log.HttpLogAppender">
</appender>
我們在xml配置中自定義一個appender類HttpLogAppender,繼承至UnsynchronizedAppenderBase<ILoggingEvent>,代碼很簡單。
public class HttpLogAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
@Override
public void append(ILoggingEvent event) {
String httpUrl = "http://localhost:8080/log";
//日誌級別
String level = event.getLevel().toString();
//日誌內容
String message =event.getFormattedMessage();
//發送
httpSend(httpUrl,level, message);
}
}
然而有時候我們希望通過xml配置傳一些自定義屬性給程序,比如以上面的代碼爲例,我們希望http服務器的地址通過配置傳遞給代碼,而不是硬編碼在代碼裏,我們可以這樣實現
修改xml配置
<appender name="logic31" class="log.HttpLogAppender">
<httpUrl>http://localhost:8080/log</httpUrl>
</appender>
修改代碼
public class HttpLogAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
String httpUrl;
public void setHttpUrl(String httpUrl) {
this.httpUrl = httpUrl;
}
@Override
public void append(ILoggingEvent event) {
//日誌級別
String level = event.getLevel().toString();
//日誌內容
String message =event.getFormattedMessage();
//發送
httpSend(httpUrl,level, message);
}
}
logback框架會自動將appender下的自定義子節點的值填充到java類裏面,也就是說在初始化的時候會自動調用HttpLogAppender的setHttpUrl方法,設置httpUrl屬性。
這樣就可以簡單方便的實現自定義屬性配置。