SpringBoot中logback日志保存到mongoDB的方法

网友投稿 382 2023-03-16


SpringBoot中logback日志保存到mongoDB的方法

Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计。

自定义Appender非常简单,继承一下AppenderBase类即可。

可以看到有个AppenderBase,有个UnsynchronizedAppenderBase,还有个AsyncAppenderBase继承了UnsynchronizedAppenderBase。从名字就能看出来区别,异步的、普通的、不加锁的。

我们定义一个MongoDBAppender继承UnsynchronizedAppenderBase

public class MongoDBAppender extends

UnsynchronizedAppenderBase {

@Override

protected void append(ILoggingEvent eventObject) {

MongoTemplate mongoTemplate = ApplicationContextProvider.getBean(MongoTemplate.class);

if (mongoTemplate != null) {

final BasicDBObject doc = new BasicDBObject();

doc.append("level", eventObject.getLevel().toString());

doc.append("logger", eventObject.getLoggerName());

doc.append("thread", eventObject.getThreadName());

doc.append("message", eventObject.getFormattedMessage());

mDFltQwqbv mongoTemplate.insert(doc, "log");

}

}

}

必须要实现一个append方法,这个方法就是logback输出日志的地方,日志都保存在eventObject对象中,我们只需要获取对象里的值并做自己的处理即可。

我们可以想象为,系统的ConsoleAppender就是不停的System.out.print(eventObject.getXXX),而FileAppender就是用OutpuptStream输出到文件里。

我们要做的就是把日志保存到mongo里,Springboot已经提供了MongoTemplate模板,需要注意日志输出是随着系统启动就开始的,而刚开始时MongoTemplate还没有被初始化,是需要等待Spring给MongoTemplate赋值的。所以刚开始时为null,需要等spring初始化完毕,MongoTemplate才有值。

由于这个Appender不归spring管理,所以我采用单独获取bean的方式。其中ApplicationContextProvider如下:

@Component

public class ApplicationContextProvider implements ApplicationContextAware {

private static ApplicationContext context;

public static ApplicationContext getApplicationContext() {

return context;

}

@Override

public void setApplicationContext(ApplicationContext ac)

throws BeansException {

context = ac;

}

public static T getBean(Class tClass) {

return context.getBean(tClass);

}

public static T getBean(String name, Class tClass) {

return context.getBean(name, tClass);

}

}

上面mongo操作日志入库的比较简单,字段也没有用完,大家可以根据自己希望保存的属性来设计mongo的结构,然后入库。

pom.xml

http://

org.mongodb

mongo-java-driver

3.4.2

ch.qos.logback

logback-core

1.1.11

ch.qos.logback

logback-classic

1.1.11

在Spring-logback.xml使用也很简单

只需要指明appender 的class即可。就是这么简单。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot 配置大全(小结)
下一篇:路由器管理员账户密码(路由器怎样改密码)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~