log4cxx用法

需要自己先包裹一下,用起来方便点。

头文件

#include 
#include 
#include 
#include 
#include 
#include 

//使用这四个宏输出日志
#define LOG_DEBUG(msg)  Log::GetInstance()->Debug()<
#define LOG_INFO(msg)   Log::GetInstance()->Info()<
#define LOG_WARN(msg)   Log::GetInstance()->Warn()<
#define LOG_ERROR(msg)  Log::GetInstance()->Error()<
    
    class Log{
    private:
        explicit Log(const std::string &strConfigFile);
        ~Log();
        Log(const Log &) = delete; 
        Log &operator=(const Log &) = delete;
    
    public:
        static Log *GetInstance(const std::string &strConfigFile = "./conf/log4cxx.properties");
        log4cxx::logstream &Debug();
        log4cxx::logstream &Info();
        log4cxx::logstream &Warn();
        log4cxx::logstream &Error();
    
    private:
        log4cxx::logstream _debug;
        log4cxx::logstream _info;
        log4cxx::logstream _warn;
        log4cxx::logstream _error;
    };

实现文件

using namespace log4cxx;

Log::Log(const std::string &strConfigFile):
            _debug(Logger::getRootLogger(), Level::getDebug()),
            _info(Logger::getRootLogger(), Level::getInfo()),
            _warn(Logger::getRootLogger(), Level::getWarn()),
            _error(Logger::getRootLogger(), Level::getError())
    {
        log4cxx::PropertyConfigurator::configureAndWatch(strConfigFile, 15000);//15秒检测一次配置文件更新,若不传默认60秒
    }
    
    Log::~Log(){
    
    }
    
    Log *Log::GetInstance(const string &strConfigFile){
        static Log log(strConfigFile);//C++11中这么写单例是线程安全的
        return &log;
    }
    
    log4cxx::logstream &Log::Debug(){
        return GetInstance()->_debug;
    }
    
    log4cxx::logstream &Log::Info(){
        return GetInstance()->_info;
    }
    
    log4cxx::logstream &Log::Warn(){
        return GetInstance()->_warn;
    }
    
    log4cxx::logstream &Log::Error(){
        return GetInstance()->_error;
    }

配置文件log4cxx.properties

#日志输出目录
recognition.log=./log/recognition

#日志输出等级,及输出的位置,日志输出到info文件、error文件、控制台
log4j.rootLogger=DEBUG,FILE_INFO,FILE_ERROR,consoleAppender

#控制台日志格式配置
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Target=System.out
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} - %5p - %m  [%l]%n

#info文件日志格式配置
log4j.appender.FILE_INFO=org.apache.log4j.RollingFileAppender
log4j.appender.FILE_INFO.Threshold=INFO    #现网问题遇到问题可将这里调成DEBUG查看更详细的日志,可热更新
log4j.appender.FILE_INFO.DatePattern='_'yyyy-MM-dd-HH
log4j.appender.FILE_INFO.File=${recognition.log}/info.log
log4j.appender.FILE_INFO.MaxFileSize=10MB
log4j.appender.FILE_INFO.Append=true
log4j.appender.FILE_INFO.MaxBackupIndex=10
log4j.appender.FILE_INFO.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE_INFO.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} - %5p - %m  [%l]%n

#error文件日志格式配置
log4j.appender.FILE_ERROR=org.apache.log4j.RollingFileAppender
log4j.appender.FILE_ERROR.Threshold=ERROR
log4j.appender.FILE_ERROR.DatePattern='_'yyyy-MM-dd-HH
log4j.appender.FILE_ERROR.File=${recognition.log}/error.log
log4j.appender.FILE_ERROR.MaxFileSize=10MB
log4j.appender.FILE_ERROR.Append=true
log4j.appender.FILE_ERROR.MaxBackupIndex=10
log4j.appender.FILE_ERROR.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE_ERROR.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} - %5p - %m  [%l]%n

你可能感兴趣的:(C++)