log4cxx用法

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

头文件

#include <log4cxx/logger.h>
#include <log4cxx/stream.h>
#include <log4cxx/level.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/exception.h>

//使用这四个宏输出日志
#define LOG_DEBUG(msg)  Log::GetInstance()->Debug()<<msg<<LOG4CXX_ENDMSG
#define LOG_INFO(msg)   Log::GetInstance()->Info()<<msg<<LOG4CXX_ENDMSG
#define LOG_WARN(msg)   Log::GetInstance()->Warn()<<msg<<LOG4CXX_ENDMSG
#define LOG_ERROR(msg)  Log::GetInstance()->Error()<<msg<<LOG4CXX_ENDMSG
    
    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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值