log4cplus是一个易于使用的C ++ 日志记录API,log4cplus具有灵活、强大、使用简单、多线程安全的特点。通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期;你可以选择将信息输出到屏幕、文件、甚至是远程服务器;通过指定策略对日志进行定期备份等等。
由于程序中有些错误是逻辑错误,需要在特定情况下才会出现,此时就展现了日志记录的强大之处,我们可以根据日志文件判断程序出问题的地方。而且写程序不加日志说明程序规模还是比较小。
我对日志输出的要求比较简单:
①可以同时输出到文件与终端
②可以在多线程中使用
③日志输出格式可配置
应用平台:linux Qt
应用方式:链接动态库
一、linux下下载与安装
虽然现在最新版本是2.0.4并且支持C++17,但是我下载的是1.2.2。
下载链接:https://github.com/log4cplus/log4cplus/releases
下载完成后解压,全部使用默认参数:
cd log4cplus-x.x.xsudo ./configure sudo makesudo make install
安装成功后,默认的路径lib库路径是/usr/local/lib/,头文件的位置:/usr/local/include/log4cplus。如下图
一、log4cplus 官方资料介绍
学东西的第一手资料还是看官网
1. 官方代码示例(并不是我想要的......)
https://sourceforge.net/p/log4cplus/wiki/CodeExamples/
这里面注意下log4cplus::Initializer initializer; 这个是2.0版本之后才支持
的,我下载的版本使用这句会报错。
2. 程序示例代码路径
/log4cplus/log4cplus-x.x.x/tests
二、控制台输出日志Demo
log4cplus 中一些功能模块:
Layout:布局器,控制输出消息的格式.
Appender:挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的
设备终端(如控制台,文件)。
Logger:记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对
象进行记录时,就需要生成一个logger。
使用log4cplus基本步骤:
① log4cplus 初始化
②. 实例化一个appender对象
③. 实例化一个layout对象
④. 将layout对象绑定(attach)到appender对象
⑤. 实例化一个logger对象,调用静态函Logger::getInstance("logger_name")
⑥. 将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出
(屏幕)appender对象会绑定到logger
⑦. 设置logger的优先级,如省略此步骤,各种有限级的消息都将被记录
⑧ 关闭log4cplus 系统
1. 程序Demo
① main函数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
log4cplus::initialize ();
helpers::LogLog::getLogLog()->setInternalDebugging(true);
std::string pattern = "%D{%m/%d/%y %H:%M:%S,%q} [%-5t] [%-5p] - %m%n";
//Appender
SharedObjectPtr append_console(new ConsoleAppender(false,true));
append_console->setName(LOG4CPLUS_TEXT("Console"));
//Layout
append_console->setLayout(std::auto_ptr(new PatternLayout(pattern)) );
//Logger
Logger test = Logger::getInstance(LOG4CPLUS_TEXT("dapi"));
test.addAppender(append_console);
for(int i=0; i
注意new ConsoleAppender(false,true); 如果使用ConsoleAppender()默认参数,那么控制台消息不会实时输出,需要等到缓冲区达到一定大小才会输出。当时这个可调试了好一会。因为我当时需要的效果就是实时输出到控制台与文件。
②按钮槽函数
void Widget::on_pbn_surpise_clicked()
{
m_clickCount++ ;
Logger test = Logger::getInstance(LOG4CPLUS_TEXT("test.subtest"));
LOG4CPLUS_ERROR(test, "click count ~" << m_clickCount);
}
这里展示一下在一处定义,全局使用的效果。
2. 程序运行结果
点击按钮一下,就会有一条日志输出。
最后,如需工程源码,公众号后台留言。Pou光明
下次和大家分享下通过配置输出到文件以及在线程中使用的测试效果。