logback日志输出到mongodb

1、继承 UnsynchronizedAppenderBase

package com.xf.config;

import java.util.Map;

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.util.StringUtils;

import com.alibaba.fastjson.JSONObject;

import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
import cn.hutool.extra.spring.SpringUtil;
import lombok.Data;

@Data
public class MongoDBAppender extends UnsynchronizedAppenderBase<LoggingEvent> {

</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> MongoTemplate mongoTemplate;

String appName;
String collectionName;

@Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> append(LoggingEvent e) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (mongoTemplate == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
        mongoTemplate </span>= SpringUtil.getBean(MongoTemplate.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    JSONObject obj </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
    obj.put(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">appName</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, appName);
    obj.put(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Level</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e.getLevel().toString());
    obj.put(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Message</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e.getFormattedMessage());
    obj.put(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TimeStamp</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e.getTimeStamp());
    obj.put(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Class</span><span style="color: rgba(128, 0, 0, 1)">"</span>, e.getCallerData()[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].toString());
    Map</span>&lt;String, String&gt; map =<span style="color: rgba(0, 0, 0, 1)"> e.getMDCPropertyMap();
    map.forEach((k, v) </span>-&gt;<span style="color: rgba(0, 0, 0, 1)"> {
        obj.put(k, v);
    });
    </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (StringUtils.isEmpty(collectionName))
        mongoTemplate.save(obj, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wjflog</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
        mongoTemplate.save(obj, collectionName);
}

}

2、xml 配置

    <appender name="MONGODB" class="com.xf.config.MongoDBAppender">
        <appName>odvapi</appName>
        <collectionName>mylog</collectionName>
    </appender>

3、mongdb 配置

spring:
  data:
    mongodb:
      database: test
      port: 27017
      host: 127.0.0.1