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><String, String> map =<span style="color: rgba(0, 0, 0, 1)"> e.getMDCPropertyMap();
map.forEach((k, v) </span>-><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