mongo依赖库
在pom文件或者build.gradle文件中引入mongo依赖
compile('org.springframework.boot:spring-boot-starter-data-mongodb:1.5.7.RELEASE')
配置
在application.yml或者application.properties文件中添加mongo相关信息
spring.data.mongodb.database=logger
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
自定义logappender
public class MongoDBAppender extends
UnsynchronizedAppenderBase<ILoggingEvent> {
@Override
protected void append(ILoggingEvent eventObject) {
MongoTemplate mongoTemplate = ApplicationContextProvider.getBean(MongoTemplate.class);
if (mongoTemplate != null) {
Map<String, Object> map = new HashMap<>();
map.put("level", eventObject.getLevel().levelStr);
map.put("thread_name", eventObject.getThreadName());
map.put("message", StringUtils.isEmpty(eventObject.getFormattedMessage()) ? eventObject.getMessage() :
eventObject.getFormattedMessage());
map.put("logger_name", eventObject.getLoggerName());
map.put("time", DateUtil.parse(eventObject.getTimeStamp()));
//将自定义的日志字段逐步存入
Map<String, String> mdc = eventObject.getMDCPropertyMap();
if (MapUtils.isNotEmpty(mdc)) {
map.putAll(mdc);
}
mongoTemplate.save(map, "logger");
}
}
}
代码中采用了从spring上下文中手动获取注入的Mongo操作类MongoTemplate.可参考如下代码
@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 appender并引用即可,例如spring-logback.xml文件中的部分配置如下
<appender name="MONGO" class="cn.buglife.log.MongoDBAppender">
</appender>