栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()); 
      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

    
      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即可。就是这么简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号