(1)log4cplus重要的类:
类 | 作用 | 说明 |
Initializer | 日志初始化 | 从2.0才开始有 |
Appender | 日志的输出位置 | 相关子类有: ConsoleAppender:输出到控制台(终端) FileAppender:输出到文件 SocketAppender:输出到远程服务器 ....... |
日志对象句柄 | 默认会有一个rootLogger,也可以自己定义一个自己的Logger对象,所有自定义的Logger的父均为rootLogger,可通过 Logger::getRoot()获取。 | |
Layout | 输出消息的格式 | 相关子类: PatternLayout、SimpleLayout |
一个Logger可以有多个Appender;一个Appender有一个Layout。
(2)log4cplus步骤:
- log4cplus初始化:::log4cplus::Initializer initializer;
- 实例化Appender;
- 实例化Layout对象;
- 将Layout对象绑定到Appender对象;
- 实例化Logger对象:Logger::getInstance();
- 将Appender对象绑定到logger对象;
- 设置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)配置文件书写
- logger配置
- root logger配置
log4cplus.rootLogger=[LogLevel], appenderName, appenderName, ...
- non-root logger配置
#INHERITED表示继承父Logger的日志级别; #logger_name为代码中定义的logger对象; log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, ... #log4cplus.additivity.logger_name表示表示是否继承父类的配置
- root logger配置
- 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