SpringBoot中logback日志怎么保存到mongoDB-创新互联

本篇内容介绍了“SpringBoot中logback日志怎么保存到mongoDB”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联专业为企业提供即墨网站建设、即墨做网站、即墨网站设计、即墨网站制作等企业网站建设、网页设计与制作、即墨企业网站模板建站服务,十多年即墨做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

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


我们定义一个MongoDBAppender继承UnsynchronizedAppenderBase

public class MongoDBAppender extends 
    UnsynchronizedAppenderBase<ILoggingEvent> { 
 
  @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> T getBean(Class<T> tClass) { 
    return context.getBean(tClass); 
  } 
 
  public static <T> T getBean(String name, Class<T> tClass) { 
    return context.getBean(name, tClass); 
  } 
}

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


pom.xml

<dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>3.4.2</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.1.11</version>
    </dependency>
    <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.1.11</version> 
    </dependency>

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


<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
  <include resource="org/springframework/boot/logging/logback/base.xml" /> 
 
  <appender name="MY_FILE" class="com.example.demo.mongo.MongoDBAppender"> 
  </appender> 
  <!-- 测试环境+开发环境. 多个使用逗号隔开. --> 
  <springProfile name="test,dev"> 
    <logger name="org.springframework.web" level="INFO"> 
      <appender-ref ref="MY_FILE"/> 
    </logger> 
    <logger name="com.example" level="INFO" /> 
  </springProfile> 
 
 
</configuration>

只需要指明appender 的class即可。

“SpringBoot中logback日志怎么保存到mongoDB”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!

文章名称:SpringBoot中logback日志怎么保存到mongoDB-创新互联
链接地址:https://www.cdcxhl.com/article38/deogpp.html

成都网站建设公司_创新互联,为您提供网站建设静态网站企业建站企业网站制作网站策划关键词优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化