使用logcxx库和boost库构建系统日志的格式化输出
2010-10-23 13:20
281 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101/
logcxx库作为一个强大的C++日志系统,在业内得到越来越多的应用。但是logcxx库欠缺一个格式化日志输出的能力,却不能不说这是它的一个比较大的缺陷。当然你可以说借助字符串类的格式化功能,然后把它塞到logcxx库的接口函数里,比如标准C库的snprintf函数,STL的std::ostringstream和MFC的CString的Format接口。snprintf的缺点在于你得先定义一个大缓冲区(不大的话担心装不下日志信息),而且它不是类型安全的;std::ostringstream使用安全,但是还是先得定义ostringstream对象来构造格式化字符串;CString一则是MFC程序专用,二则它不是类型安全的,三则如果把它塞到logcxx库接口里,隐含了一个CString到char*的转换操作。下面我要介绍的方法比上面的方法都要简单和安全,那就是使用boost库的boost::format和boost::lexical_cast。
logcxx库的使用方法这里我不作赘述,大致是设置一个配置文件,定义输出方式、等级等,大家可以参考这篇文章:log4cxx 用法详解。金庆大侠提出boost::format和logcxx库配合使用(详见参考文献2),我试了一下很好用。不过我发现logcxx和boost::lexical_cast结合同样好用。下面是测试代码:
编译环境:Win XP + sp3,VS C++ 2005 + sp1
参考文献:
1. log4cxx 用法详解
2. log4cxx配合boost::format
,作者金庆。
来源:http://blog.csdn.net/clever101/
logcxx库作为一个强大的C++日志系统,在业内得到越来越多的应用。但是logcxx库欠缺一个格式化日志输出的能力,却不能不说这是它的一个比较大的缺陷。当然你可以说借助字符串类的格式化功能,然后把它塞到logcxx库的接口函数里,比如标准C库的snprintf函数,STL的std::ostringstream和MFC的CString的Format接口。snprintf的缺点在于你得先定义一个大缓冲区(不大的话担心装不下日志信息),而且它不是类型安全的;std::ostringstream使用安全,但是还是先得定义ostringstream对象来构造格式化字符串;CString一则是MFC程序专用,二则它不是类型安全的,三则如果把它塞到logcxx库接口里,隐含了一个CString到char*的转换操作。下面我要介绍的方法比上面的方法都要简单和安全,那就是使用boost库的boost::format和boost::lexical_cast。
logcxx库的使用方法这里我不作赘述,大致是设置一个配置文件,定义输出方式、等级等,大家可以参考这篇文章:log4cxx 用法详解。金庆大侠提出boost::format和logcxx库配合使用(详见参考文献2),我试了一下很好用。不过我发现logcxx和boost::lexical_cast结合同样好用。下面是测试代码:
#include <string> using std::string; #include "boost/format.hpp" #include "boost/lexical_cast.hpp" #include "log4cxx/logger.h" #include "log4cxx/propertyconfigurator.h" // 获取日志配置信息,定义日志类变量 log4cxx::PropertyConfigurator::configure(_T("Paint.config")); log4cxx::LoggerPtr rootLogger = log4cxx::Logger::getLogger(_T("Paint")); LOG4CXX_DEBUG(rootLogger,_T("系统准备初始化/n")); // 将变量i、j的地址输出到日志 int i = 0; int j = 0; LOG4CXX_DEBUG(rootLogger,boost::format("i、j的地址分别是%1%和%2%")%(&i)%(&j)); LOG4CXX_DEBUG(rootLogger,_T("i、j的地址分别是")+boost::lexical_cast<string>(&i)+_T("和")+boost::lexical_cast<string>(&j));
编译环境:Win XP + sp3,VS C++ 2005 + sp1
参考文献:
1. log4cxx 用法详解
2. log4cxx配合boost::format
,作者金庆。
相关文章推荐
- 使用logcxx库和boost库构建系统日志的格式化输出
- 使用logwrapper工具将可执行程序的输出写入日志系统
- 利用脚本编程格式化输出转存系统日志
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
- 使用Docker构建ELK Docker集群日志收集系统
- 使用Slf4j集成Log4j2构建项目日志系统解决方案
- 使用GoAccess构建简单实时日志分析系统
- 使用Fluentd和MongoDB构建日志收集系统
- 使用Fluentd + MongoDB构建实时日志收集系统
- 使用Fluentd + MongoDB构建实时日志收集系统
- 使用Fluentd + MongoDB构建实时日志收集系统
- 使用p6spy格式化日志输出
- 使用Fluentd和MongoDB构建日志收集系统
- 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志
- 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志
- 使用Fluentd + MongoDB构建实时日志收集系统
- 使用Fluentd + MongoDB构建实时日志收集系统