yaolog

  写代码总免不了要看日志。就C++而言,不少程序员只是简单地用printf来输出日志,或者临时写个日志类,log4cpp等比较“重型”的日志库的使用率反而并不怎么高(至少从我经历的项目而言)。也许是不想为不需要的功能付出额外的学习成本,但无论如何,对于通用类别的工具采取临时手写的方式来应付,从长远考虑,在功能性和健壮性方面是得不偿失的。写这个日志类(yaolog)的最初的想法只是为了实现“输出到文件的带有时间信息的printf”,后来历经不同项目需求的“拷问”,借鉴和引用了很多开源代码(在此对那些作者表示感谢),就成了现在这个样子。yaolog的主要特点如下:
    # printf风格的接口,包括LOGA__, LOGW__, LOG__, LOGBIN__
    # 日志附加信息包括时间,源代码文件,函数,行号
    # 每个日志对象都有单独的行为
    # 在程序运行时通过配置ini文件动态改变日志行为
    # 可以输出到控制台窗口,文件,http服务器
    # 线程安全
    # 跨平台(windows, linux)

    这里有一个重点就是尽可能的简单,我对接口修改过多次,为了尽量做到简单易用和自解释。而上述功能都是从实际项目的需求中提炼出来的,比如发送日志到http服务器,起因于某次有个用户在QQ上报了一个bug,这个bug如果在有日志的debug版本下应该能很快确定原因,但是release版本是没有日志的。当然,也可以给用户一个带日志的dll去替换,但是这种方法至少存在两个问题:版本控制(新的dll和用户原来的dll一致吗)和日志查看(用户怎样将日志提交给开发人员,不要高估了小白)。于是就想到要在服务器端控制日志的启用,以及将日志内容发送到服务器进行分析。
    yaolog v1.5的代码和demo在这里 http://download.csdn.net/detail/gemo/5027431
    另外我在codeproject上发了一篇详细说明,地址在这里 http://www.codeproject.com/Articles/508529/yaolog-A-powerful-easy-use-cross-platform-Cplusplu
    如果你觉得这个工具好用请回帖支持一下。本人毕竟水平有限,如果你发现bug或其他不足之处,也请回帖多多指教哈!
    下面贴一段简单的测试代码:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include "yaolog.h"
 
// 日志对象的ID,可以自定义,不能雷同
#define LOGID_I "info"
#define LOGID_C "custom"
#define LOGID_B "bin"
 
int  main()
{
     // 初始化,在程序入口点调用
     YaoUtil::LogFactory::Init();
 
     // 创建日志对象
     YaoUtil::LogFactory::Create(LOGID_I,  true );
     YaoUtil::LogFactory::Create(LOGID_C,  true );
     YaoUtil::LogFactory::Create(LOGID_B,  true false );
 
     LOGA__(LOGID_I,  "My name is %s! I'm %d!" "neil" , 29);
 
     // 设置日志对象的属性:输出日志到控制台窗口和文件
     YaoUtil::LogFactory::SetAttr(LOGID_I,  true , YaoUtil::LOGOUT_FLAG_STDOUT | YaoUtil::LOGOUT_FLAG_FILE,  true false true true );
     LOGW__(LOGID_I, L "My name is %s! I'm %d!" , L "neil" , 29);
 
     // 设置日志对象的属性:输出日志到文件和http服务器
     YaoUtil::LogFactory::SetAttr(LOGID_I,  true , YaoUtil::LOGOUT_FLAG_FILE | YaoUtil::LOGOUT_FLAG_REMOTE,  true true true true false "c:\\" "tt.log" "http://192.168.1.200/default.aspx" );
     LOG__(LOGID_I, _T( "My name is %s! I'm %d!" ), _T( "neil" ), 29);
 
     // 设置日志对象的属性:使用ini文件
     YaoUtil::LogFactory::SetAttrFromConfigFile(LOGID_C,  "logconfig.ini" );
     for  ( int  i = 0; i < 100; i++)
     {
         LOGA__(LOGID_C,  "You can modify the ini file and view effect(%d)!" , i);
         Sleep(500);
     }
 
     // 二进制日志
     YaoUtil::LogFactory::SetAttrFromConfigFile(LOGID_B,  "logconfig.ini" );
     char  buf[10] = { 0,1,2,3,4,5,6,7,8,9 };
     LOGBIN__(LOGID_B, buf, 10);
     
     std::cin.get();
     
     // 清理,在程序退出前调用
     YaoUtil::LogFactory::Exit();
     return  0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值