开启本节之前,有个假设条件,你已经在你的Springboot项目中完成对log4j2的集成。如果还没有,请先阅读另外一篇文章:
Springboot实践--集成log4j2
英文阅读无障碍的童鞋,可以到官方查看文档,有全面介绍,传送门【官方文档】
1. 增加依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-mongodb3</artifactId>
</dependency>
2. 修改log4j2配置文件
<appenders>
<!--输出到mongoDB,缓存10M,根据自定义KEY做过滤-->
<NoSql name="mongoDB" bufferSize="10">
<Filters>
<ContextMapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
<KeyValuePair key="idNo" value="00"/>
</ContextMapFilter>
</Filters>
<MongoDb3 databaseName="testDB"
collectionName="test_log"
server="localhost"
port="27017"
username="test"
password="test2019">
</MongoDb3>
</NoSql>
</appenders>
<loggers>
<logger name="org.springframework" level="error"/>
<root level="INFO">
<appender-ref ref="mongoDB"/>
</root>
</loggers>
3.启动类修改
完成以上配置后,日志已经可以正确存入数据库,但是在项目中往往会出现异常抛出
com.mongodb.MongoSocketOpenException: Exception opening socket
原因是springboot中MongoAutoConfiguration.class对mongodb自动配置,我们在配置中未对数据源进行配置,系统会自动连接localhost:27017,显然无法成功。处理方式两种:
方法一:修改启动类(建议)
@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
方法二:application.yml中增加数据源配置
spring:
data:
mongodb:
host: 192.168.1.100
port: 27017
database: test
username: test
password: test2019