通过引入MongoDB可以解决分布式不同服务的日志收集
安装MongoDB
关于MongoDB可以参考:http://blog.csdn.net/fangxiaoji/article/details/51175866
安装后输入:./mongo 测试出现下面的提示就正面安装成功
[root@localhost bin]# ./mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
项目
POM配置引入mongodb依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.2.2</version>
</dependency>
application.yml添加配置
data:
mongodb:
database: test
host: 192.168.1.106
port: 27017
在log4j2的Appenders中添加mongodb的支持,Apache的log4j2手册可以找到配置的属性,手册:http://logging.apache.org/log4j/2.x/manual/appenders.html#NoSQLAppender,对应的yml配置如下
NoSQL :
name : databaseAppender
MongoDb :
databaseName : test
collectionName : mongoTest
server : 192.168.1.106
port: 27017
运行系统,如果使用idea可以安装Mongo Plugin进行查看
插件:
配置mongodb服务器
查询到结果
在途中可能会遇到问题
第一个就是时间问题,MongoDB中时间的记录总比现在的时间慢8小时,是因为MongoDB数据库保存的时间是ISODate类型,所以会比我们现在的时间慢8小时
第二个在启动服务的时候直接抛出异常
2017-09-23 22:18:25,996 main ERROR Error processing element NoSQL: CLASS_NOT_FOUND
2017-09-23 22:18:26,002 main ERROR Unable to locate plugin type for NoSQL
2017-09-23 22:18:26,193 main ERROR Unable to locate plugin for MongoDb
2017-09-23 22:18:26,194 main ERROR Unable to locate plugin for NoSQL
2017-09-23 22:18:26,194 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.config.AppendersPlugin for element Appenders. java.lang.NullPointerException
at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.visit(PluginElementVisitor.java:52)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:243)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:131)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:942)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:882)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:498)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:227)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:239)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:603)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:226)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:103)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:179)
at app.BootApplication.main(BootApplication.java:16)
2017-09-23 22:18:26,249 main ERROR Unable to locate appender "CONSOLE" for logger config "root"
2017-09-23 22:18:26,250 main ERROR Unable to locate appender "CONSOLE" for logger config "app.com.kenho.mapper"
2017-09-23 22:18:26,250 main ERROR Unable to locate appender "databaseAppender" for logger config "app.com.kenho.mapper"
2017-09-23 22:18:27,567 main ERROR Error processing element NoSQL: CLASS_NOT_FOUND
2017-09-23 22:18:27,568 main ERROR Unable to locate plugin type for NoSQL
2017-09-23 22:18:27,575 main ERROR Unable to locate plugin for MongoDb
2017-09-23 22:18:27,575 main ERROR Unable to locate plugin for NoSQL
2017-09-23 22:18:27,575 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.config.AppendersPlugin for element Appenders. java.lang.NullPointerException
at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.visit(PluginElementVisitor.java:52)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:243)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:131)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:942)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:882)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:498)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:227)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:239)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:603)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.reinitialize(Log4J2LoggingSystem.java:194)
at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:74)
at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:59)
at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.initialize(Log4J2LoggingSystem.java:148)
at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:303)
at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:276)
at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239)
at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:212)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:325)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:296)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at app.BootApplication.main(BootApplication.java:16)
2017-09-23 22:18:27,578 main ERROR Unable to locate appender "CONSOLE" for logger config "root"
2017-09-23 22:18:27,578 main ERROR Unable to locate appender "CONSOLE" for logger config "app.com.kenho.mapper"
2017-09-23 22:18:27,579 main ERROR Unable to locate appender "databaseAppender" for logger config "app.com.kenho.mapper"
这个问题换做pro配置文件会抛出另外一个类似的的异常,后来通过查找Apache的问题跟踪系统找到了问题的起因是在log4j2的一个改变,使得在log4j2使用时候还比需要引用别的依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-nosql</artifactId>
<version>2.9.0</version>
</dependency>
Git:https://github.com/tale2009/springbbot_log4j2_mongodb