booster log 库介绍
来源:互联网 发布:c语言稀疏矩阵的和 编辑:程序博客网 时间:2024/06/06 08:37
用什么在C++程序里面写日志?一直在等待boost发布真正的日志库,就是不见踪影。以前用的log4cxx也太老了。在使用CppCMS的时候,发现了Artyom开发的booster::log,用法简单,值得推荐。
编译CppCMS的方法请看我以前的博客。
然后在你的C++代码中这样写:
#include <booster/log.h>#include <booster/shared_ptr.h>/* * */int main(int argc, char** argv) { booster::shared_ptr<booster::log::sinks::file> f(new booster::log::sinks::file()); f->append(); f->max_files(10); f->open("/opt/test.log"); booster::log::logger::instance().add_sink(f); booster::log::logger::instance().set_default_level(booster::log::notice); return 0;}
max_files是什么意思?指的是最多生成10个日志文件,每次调用f->open的时候,就会产生一个新的test.log文件,而把旧的文件重命名,比如叫做test.log.1
注意max_files调用需要在open之前,否则无效,因为实现代码如下:cppcms1.0.2/booster/log/src/log.cpp
void file::max_files(unsigned m){if(!opened_) max_files_=m;}
目前旋转日志不支持按照文件大小自动切分,不过看了里面的代码,有max_size和current_size变量,Artyom日后应该会增加这个功能。
所有的日志处理类都继承自booster::sink类,你可以实现自己的处理类,然后调用add_sink就可以接手日志消息。
参考文档见:http://cppcms.com/cppcms_ref/latest/namespacebooster_1_1log.html#details
看看如何写日志吧。
BOOSTER_ERROR("main") << "The configuration file path specified by paramerter doens't exit,file path:" << xml_path;宏BOOSTER_ERROR可以输出日志。_ERROR代表日志级别,低于默认级别的不会出现在日志文件中。
enum level_type { emergency = 0, alert = 10, critical = 20, error = 30, warning = 40, notice = 50, info = 60, debug = 70, all = 100 }在前面的日志级别高,越往后越低。
宏的定义都在log.h文件中:
#define BOOSTER_LOG(level,module) \::booster::log::logger::instance().should_be_logged(::booster::log::level,module)\&& ::booster::log::message(::booster::log::level,module,__FILE__,__LINE__).out()/// Same as BOOSTER_LOG(emergency,m)#define BOOSTER_EMERG(m)BOOSTER_LOG(emergency,m)/// Same as BOOSTER_LOG(alert,m)#define BOOSTER_ALERT(m)BOOSTER_LOG(alert,m)/// Same as BOOSTER_LOG(critical,m)#define BOOSTER_CRITICAL(m)BOOSTER_LOG(critical,m)/// Same as BOOSTER_LOG(error,m)#define BOOSTER_ERROR(m)BOOSTER_LOG(error,m)/// Same as BOOSTER_LOG(warning,m)#define BOOSTER_WARNING(m)BOOSTER_LOG(warning,m)/// Same as BOOSTER_LOG(notice,m)#define BOOSTER_NOTICE(m)BOOSTER_LOG(notice,m)/// Same as BOOSTER_LOG(info,m)#define BOOSTER_INFO(m)BOOSTER_LOG(info,m)/// Same as BOOSTER_LOG(debug,m)#define BOOSTER_DEBUG(m)BOOSTER_LOG(debug,m)
关于时区,最早默认为GMT+0,后来我在mailing list中提了意见,现在是更友好的本地时区为默认值,不过可以通过函数set_timezone设置你想要的时区。
- booster log 库介绍
- DART booster
- Boost Log库使用介绍
- 内存整理工具 Memory Booster
- Android入门:Log介绍
- /var/log目录介绍
- Android Log介绍
- linux内核log介绍
- JAVA LOG系统介绍
- Mysq bin-log介绍
- adb log 命令介绍
- Letasoft Sound Booster 放大音量
- logger(三):其他log库的介绍(&glog的用法)
- Android Log等级的介绍
- dalvikvm gc相关log介绍
- Android Log等级的介绍
- Android Log等级的介绍
- 增发精力汤 Hair Growing Energy Booster
- iOS性能优化翻译稿(第一章)
- bash shell shortcut
- iOS性能优化翻译稿(第二章,上)
- RDP related
- 刚刚参加完四个月的java培训,开始找工作了
- booster log 库介绍
- Sharepoint 2010 的一些实践经验和技巧.
- Ubuntu实践(6):默认的shell
- 使用数据时的一个问题:建立数据库时小心使用了关键字
- Apache DBUtils入门(一)
- VisualStudio 2010对WebService进行单元测试
- Learning AJAX
- Apache DBUtils入门(二)
- 自己写浏览器—终结