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属性。
这样就可以简单方便的实现自定义属性配置。
网友评论