Solon2 自定义 slf4j 日志添加器(比如存到数据库)
本案需要引入已适配的 slf4j 日志框架(solon.logging.simple
或 logback-solon-plugin
或 log4j-solon-plugin
)。
1、自定义添加器入门
- 实现自定义添加器
实现一个简单的日志添加器,并把将日志以json格式打印出来:
import org.noear.solon.logging.event.AppenderBase;
//添加器实现类
public class JsonAppender extends AppenderBase {
@Override
public void append(LogEvent logEvent) {
System.out.println("[Json] " + ONode.stringfiy(logEvent));
}
}
- 增加配置
增加一个自定义的添加器(名字:json;等级:INFO;类名:demo.log.JsonAppender )
solon.logging.appender:
json:
level: INFO
class: demo.log.JsonAppender
2、高阶自定义添加器,将日志流转批并持久化
- 实现用于持久化的添加器
框架提供了高性能的流转批的添加器 “PersistentAppenderBase”,扩展一下实现执久化处理即可:
//持久化添加器(实现了流转批的效果)//提供高性能支持
public class PersistentAppender extends PersistentAppenderBase
LogService logService;
public PersistentAppender(){
//从容器里,手动获取日志服务
Solon.context().getBeanAsync(LogService.class, bean->{
logService = bean;
});
}
@Override
public void onEvents(List<LogEvent> list) {
//批量插到数据库去(或者批量提交到远程接口)
if(logService != null){
logService.insertList(list);
}
}
}
- 添加配置
solon.logging.appender:
persistent:
level: TRACE
class: demo2010.dso.PersistentAppender
- 具体代码,参考这个示例:
https://gitee.com/noear/solon-examples/tree/main/2.Solon_Advanced/demo2010-logging_batch