基于C++的跨平台的轻量级日志类

写在最前:该日志类的所有源代码可至http://download.csdn.net/detail/great3779/4034521免费下载。


目前C++下比较常用的日志类是log4cpp。这是一个大而全的日志类,提供了很多的功能和扩展。但其缺点是使用起来比较繁杂,而且携带的库也比较大。因此有时我们希望使用一些轻量级的、接口简单易用的日志库。基于此目的,我自己开发了一个轻量级跨平台的日志类。目前使用在Wind FeedHandler项目中做为日常日志输出。除了写日志的基本功能外,该类也展示了以下几个方面的内容:

(1). 多线程写日志的思想。(写日志的动作不应对主程序产生较大影响)
(2). 展示了跨平台的线程安全、信号通知等机制
(3). 展示了一个高效的数据处理器
(4). 展示了回调机制的使用
(5). 展示了单例的使用
(6). 间接展示了模板类的使用


一。该类的接口非常简单

[cpp]  view plain copy
  1. // 添加日志  
  2. void AddLog(std::string strLog, LOG_LEVEL log_level = NORMAL_LOG);  
  3.   
  4. // 设置日志文件存放路径  
  5. // pfunc为回调函数,用于展示Log内部状态  
  6. void SetLogPath(const std::string& file_path, LOG_CALLBACK_FUNC pfunc = NULL);  
其中

SetLogPath在开始写日志前调用,主要是设置log文件的存放路径及log文件名(即设置log文件的绝对路径)。需要注意的是日志类会自动按照日期对日志文件命名,即如果在SetLogPath接口传入的文件名为run.log, 则实际的log文件名形如 run20110910.log。同时接口允许设置一个回调函数LOG_CALLBACK_FUNC 用于回调日志类的内部运行状态。

AddLog则是添加一条日志。LOG_LEVEL允许设置日志的级别,默认是普通级别。


二。日志类的内部运转非常简单,主要是借助了之前提到的数据处理器(可参考http://blog.csdn.net/great3779/article/details/7180383)进行运转。

[cpp]  view plain copy
  1. class CLogDataHandler : public CDataHandler<std::string>  
  2. {  
  3. public:  
  4.     CLogDataHandler(void);  
  5.     virtual ~CLogDataHandler(void);  
  6.   
  7. public:  
  8.     void SetLogObj(CLog* ptr_log) {m_ptr_log = ptr_log;}  
  9.   
  10. protected:  
  11.     // 处理数据的函数,可在运行时绑定  
  12.     virtual void DataFunc(std::string& t);  
  13.   
  14. protected:  
  15.     CLog* m_ptr_log;  
  16. };  
派生类CLogDataHandler继承自虚类CDataHandler,屏蔽了线程安全以及信号通知机制。使得日志类能轻松做到线程安全及高效吞吐。


三。该日志类的使用也非常简单。

由于日志的特殊性,在设计时将此日志类设计成单例模式。使用如下

[cpp]  view plain copy
  1. // 设置日志路径。支持相对/绝对/网络路径  
  2. CLog::Instance().SetLogPath("log\\log.log", MsgFunc);  
  3.   
  4. // 添加一条日志  
  5. CLog::Instance().AddLog("test_log");  


// 回调函数定义如下

[cpp]  view plain copy
  1. void MsgFunc(int status, std::string msg)  
  2. {  
  3.     cout << msg << endl;  
  4. }  

http://wenku.baidu.com/link?url=4hSs6L49N2RuVNmAl7ZzDNh4N4gbTnpqV5Xek_NEpx39aeKszf8dpLVSlYPoyuDk7tbGJZKgNUfaNqXMgGy4gEDVLUZE7HAzzf4PBVsqy_a

http://www.ibm.com/developerworks/cn/xml/x-tipflaw.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值