logback自定義appender讀取xml中的配置 logback自定義appender讀取xml中的配置

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屬性。

這樣就可以簡單方便的實現自定義屬性配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章