【log4cplus】学习

官方文档

(1)log4cplus重要的类:

作用说明
Initializer日志初始化从2.0才开始有
Appender日志的输出位置

相关子类有:

ConsoleAppender:输出到控制台(终端)

FileAppender:输出到文件

SocketAppender:输出到远程服务器

.......

Logger

日志对象句柄

默认会有一个rootLogger,也可以自己定义一个自己的Logger对象,所有自定义的Logger的父均为rootLogger,可通过 Logger::getRoot()获取。

Layout输出消息的格式

相关子类:

PatternLayout、SimpleLayout

一个Logger可以有多个Appender;一个Appender有一个Layout。 

(2)log4cplus步骤:

  1. log4cplus初始化:::log4cplus::Initializer initializer
  2. 实例化Appender;
  3. 实例化Layout对象;
  4. 将Layout对象绑定到Appender对象;
  5. 实例化Logger对象:Logger::getInstance();
  6. 将Appender对象绑定到logger对象;
  7. 设置logger的优先级,当高于该优先级的日志将会被输出。(默认优先级为DEBUG)

(3)使用:(根据自己的理解有些配置可以直接在代码中编写,写死。也可以通过在配置文件读取配置)

(3.1)纯代码:


    /*用Initializer类进行初始化*/
    log4cplus::Initializer initializer;
 
    /*第1步:创建ConsoleAppender,其中根据自己想要输出的日志的位置可以选择fileAppender、SocketAppender等。*/
    log4cplus::SharedAppenderPtr appender(new log4cplus::ConsoleAppender());
 
    /*第2步:设置Appender的名称和输出格式(SimpleLayout)*/
    appender->setName(LOG4CPLUS_TEXT("console"));
    
    appender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(LOG4CPLUS_TEXT("[%c] %D{%Z %Y-%m-%d %H:%M:%S.%q} [%F:%L] %p : %m%n"))));
 
    /*第3步:获得一个Logger实例*/
    log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT ("test"));
    /*设置等级(低于该等级则不被输出)*/
    logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);
 
    /*第4步:为Logger实例添加ConsoleAppender*/
    logger.addAppender(appender);
 
    /*第5步:使用宏将日志输出*/
    LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));
 

(3.2)为了方便修改相关配置,也可以通过读取配置文件的方式获取参数:代码+配置文件:通过PropertyConfigurator类读取相关配置。

log4cplus: log4cplus::PropertyConfigurator Class Reference

(3.2.1)代码中读取配置,其中代码中定义的logger的名称跟配置文件的要一致。

/*初始化*/
log4cplus::Initializer initializer;


/*初加载配置文件,如下等价于doConfigure()*/
log4cplus::PropertyConfigurator configurator(配置文件路径);
configurator.configure();


/*加载logger实例*/
log4cplus::Logger logger  = log4cplus::Logger::getInstance("logger对象名称");


/*打印日志*/
LOG4CPLUS_INFO(logger, "测试");

(3.2.2)配置文件书写

  1. logger配置
    1. root logger配置
      log4cplus.rootLogger=[LogLevel], appenderName, appenderName, ...
    2. non-root logger配置
      #INHERITED表示继承父Logger的日志级别;
      #logger_name为代码中定义的logger对象;
      
      log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, ...
      
      
      
      
      #log4cplus.additivity.logger_name表示表示是否继承父类的配置

  2. Appender配置
#appenderName是在logger的配置中的appendername
#fully.qualified.name.of.appender.class有:
   #log4cplus::ConsoleAppender-终端输出
   #log4cplus::FileAppender-文件输出
   #log4cplus::RollingFileAppender-日志按照大小文件输出
   #log4cplus::DailyRollingFileAppender-日志按照日期(时间间隔)文件输出
   #log4cplus::SocketAppender-远程服务器



log4cplus.appender.appenderName=fully.qualified.name.of.appender.class

log4cplus.appender.appenderName.选项配置=xxx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值