booster log 库介绍

用什么在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;
}


运行看一下,/opt/test.log日志产生了。

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 库介绍)