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

这样就可以简单方便的实现自定义属性配置。

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