MongoDB + Log4j 2:搭建日志服务

    最近有个需求:日志统一管理。在服务器上,使用MongoDB保存日志信息,项目中,使用Log4j 2控制日志输出。这样可以在自己电脑使用MongoDB可视化工具,查看日志信息,便于监视程序运行情况。

    只提供三种日志级别对象:error、info、debug。项目日志信息保存至设定的数据库中,按照不同日志级别分别保存至不同的集合中,便于查找日志信息。

    以下是实际开发内容:

    环境信息:CentOS_6.5、JDK_1.8、MongoDB_3.6.4

    pom.xml:


    
        org.mongodb
        mongo-java-driver
        3.6.3
    
    
        org.apache.logging.log4j
        log4j-nosql
        2.5
    

备注:上面所列出的是必须的依赖信息。实际会引入log4j-api、log4j-core、log4j-nosql、mongo-java-driver这四个文件。

log4j2.xml:




    
    
        
            
        
        
            
        
        
            
        
        
            
        
    

    
    
        
            
        
        
            
        
        
            
        
        
            
        
    

MongoDBLogUtil.java

package com.nba;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * 使用log4j 2保存日志信息至mongodb
 */
public class MongoDBLogUtil {

    // 默认root
//  private static Logger rootLogger = LogManager.getLogger(MongoDBLogUtils.class);
    // 指定errorLogger
    private final static Logger ERROR_LOGGER = LogManager.getLogger("errorMongoLog");
    // 指定infoLogger
    private final static Logger INFO_LOGGER = LogManager.getLogger("infoMongoLog");
    // 指定debugLogger
    private final static Logger DEBUG_LOGGER = LogManager.getLogger("debugMongoLog");

    // 保存error级别的日志
    public static void setErrorLogger(String message){
        ERROR_LOGGER.error(message);
    }
    // 保存info级别的日志
    public static void setInfoLogger(String message){
        INFO_LOGGER.info(message);
    }
    // 保存debug级别的日志
    public static void setDebugLogger(String message){
        DEBUG_LOGGER.debug(message);
    }
}

    以上,就是日志服务的内容。当前日志服务比较简单,可以根据实际需求进行扩展及调整。实际上,主要的工作,即log4j 2与MongoDB进行交互及日志信息、格式等均由工具包实现。

    实现过程中,也遇到一些奇特的现象 —— 使用log4j-nosql时,最初使用的是最新的2.9版本,但在实际使用时,保存debug日志到集合中时,其他级别的集合也同时保存了debug日志信息。即无法实现按照日志级别将日志信息进行分类保存。更换至2.5版本后,此问题消失。

    当时急于实现功能,未细致查看原因。不知是操作错误导致,还是其他问题。有时间可以在探查。

    补充,log4j 2配置文件查询顺序:

1、系统属性:log4j.configurationFile;
2、classpath:log4j2-test.properties;
3、classpath:log4j2-test.yaml or log4j2-test.yml;
4、classpath:log4j2-test.json or log4j2-test.jsn;
5、classpath:log4j2-test.xml;
6、classpath:log4j2.properties;
7、classpath:log4j2.yaml or log4j2.yml;
8、classpath:log4j2.json or log4j2.jsn;
9、classpath:log4j2.xml;
10、默认配置,日志输出至:console.

    log4j 2功能很多,没事翻一翻官方文档还是有用的,特别是有时候遇到一些属性不是太了解,可以去查看查看,官方文档还是最权威、最可靠的资料。

    附:

        官网地址:http://logging.apache.org/log4j/2.x/manual/index.html

        MongoDB可视化工具Robo 3T:https://robomongo.org/

你可能感兴趣的:(Java之路)