• C++ 基于boost.asio封装的日志库,支持输出到文件、控制台和syslog远程日志,支持变长参数的日志输出


    仓库代码路径:https://gitee.com/liudegui/loghelper

    • 需提前安装boost1.66版本以上开发包;
    • 基于boost.log的日志模块,供C++程序使用;
    • 动态链接库方式提供模块,非嵌入式;

    写日志

    • 支持多种不同的输出目的地,满足:
      • 输出到本地文件,支持按日期存储,支持按大小回滚;
      • 支持rsyslog协议,以将日志发往远程日志服务器
    • 支持类似std::cout的打印方式:LOG(kErr) << "error"; ,也支持printf打印方式:LOG2(kErr, "error %d", 100);
       LOG(kErr) << "[foo] error!!! ";
       LOG2(kErr, "%s, %d", "test log", 100);
      
      • 1
      • 2
    • 使用示例见test_app程序。
    • 配置文件示例
    [SysLog]
    
    ; syslog日志服务器地址
    SysLogAddr = 192.168.10.199
    ; syslog日志服务器端口     
    SysLogPort = 514  
    
    ; 文件日志目录最大占用磁盘空间,单位:M
    FilelogMaxSize = 100
    
    ; -1:不产生日志,1:debug以上级别,
    ; 2:info以上级别,3:warning以上级别,4:error以上级别
    ; console日志等级
    ConsoleLogLevel = 1
    ; 写入文件日志等级
    FileLogLevel = 4
    ; syslog日志等级
    SysLogLevel = 2
    ; 是否使用boost.log;如果不使用,则启用std::cout输出至屏幕上,这将有效减少日志本身消耗
    UseBoostLog = true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    说明:如果设置UseBoostLog = false,则关闭boost.log的使用,转而启用std::cout输出至屏幕上

    • 输出结果示例

    调用代码如下:

    2020-09-24 17:38:39.118359 <DEBUG> "FOO" [foo:16] - [foo] debug
    2020-09-24 17:38:39.120355 <DEBUG> "BAR" [bar:31] - [bar] debug
    2020-09-24 17:38:39.138305 <INFO> "FOO" [foo:18] - [foo] info...
    2020-09-24 17:38:39.139303 <ERROR> "FOO" [foo:19] - [foo] error!!!
    2020-09-24 17:38:39.142295 <ERROR> "FOO" [foo:20] - test log, 100
    2020-09-24 17:38:39.155260 <INFO> "BAR" [bar:33] - [bar] info...
    2020-09-24 17:38:39.155260 <ERROR> "BAR" [foo:22] - [foo] error!!!
    2020-09-24 17:38:39.170223 <ERROR> "BAR" [bar:35] - [bar] error!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    支持C++11:模板函数实现支持变长参数的简单日志输出

        AMS_DEBUG("debug {} log", 111);
        AMS_INFO("info {}log", 222);
        AMS_WARN("warn {} log {}", 333, 11);
        AMS_ERR("err {} log", 444);
    
    • 1
    • 2
    • 3
    • 4

    日志模块的设计

    在这里插入图片描述

    • 主要是利用了C++构造和自动析构的机制,并重载<<操作符来保留使用习惯;
    • 在析构构造函数中,组织消息拼接;
    • 根据使用的宏将拼接好的消息交给不同日志输出模块
    • 借鉴github的Boost.Log封装,boost_log_example 和 [simpleLogger](https://github.com/gklingler/simpleLogger)
  • 相关阅读:
    基本数据类型在内存中存储形式
    IT创业网赚项目 - 越垂直越赚钱,这个思维价值连城。
    【学习笔记】Python 使用 matplotlib 画图
    flask celery定时任务
    配置frp实现内网穿透并注册服务实现开机自启。
    【配电变电站的最佳位置和容量】基于遗传算法的最优配电变电站放置(Matlab代码实现)
    监控方法论
    【zookeeper】zookeeper集群安装
    Go 结合Gin导出Mysql数据到Excel表格
    用C语言开发入门游戏FlappyBird
  • 原文地址:https://blog.csdn.net/stallion5632/article/details/125551184