栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++日志库

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++日志库

c++/Qt日志库实现
  • 前言
  • 日志库需求
  • 流程图
  • 最终实现
    • 发送Demo
    • 控制显示Demo
  • 使用方法
  • 下载地址
    • 测试程序下载地址
    • 源码下载地址
  • 缺陷
  • 最后

前言

因为我有很多服务是跑在后台的,每次查看日志都很麻烦需要ssh 到服务后台去查看,如果日志每次UDP通过打过来,同时也可以远程控制它的输出模式,那该多好啊。

日志库需求

1.最基本的控制台、文件和UDP输出,因为是qt程序用,所以要兼容qDebug输出
2.使用方便,简单,易用。
3.如果同时支持配置文件或者直接调用日志文件接口来初始化日志
4.尽量使用c++标准函数

流程图 最终实现 发送Demo

控制显示Demo

使用方法
  1. 初始化日志库
    1.1. 通过直接调用函数接口的方式实现
#define E_DEMO_THREAD_ID 0x22
#define E_DEMO_THREAD_STR "DemoThread"
 	//初始化日志文件
    CLogSystemMgr::Instance()->InitLogSystem("LogSystemDemo1", E_LOG_SYSTEM_TYPE_PRINTF | E_LOG_SYSTEM_TYPE_FILE| E_LOG_SYSTEM_TYPE_UDP);
    //设置日志文件策略
    CLogSystemMgr::Instance()->SetFileLogStrategy(E_FILE_LOG_SYSTEM_MODE_FOLDER, "LogSystemDemo1",QString(a.applicationDirPath() +"/../Log/" ).toLocal8Bit().data(), 1, 1);
    //设置UDP发送日志 建议不开启 ,建议使用exe远程进行控制
    CLogSystemMgr::Instance()->SetLogSystemUDP(true,"10.10.10.213",22333);
    //设置是或否可以使用远程控制日志 为了安全,可以无需开启
    CLogSystemMgr::Instance()->EnableControlMonitorUDP(true, "127.0.0.1", 22334); 
    
    //设置QDebug重定向到日志库 使用默认输出模块
    CLogSystemMgr::Instance()->SetLogSystemRedirectQDebug(true);
    
    //注册一个自定义模块
    if (!CLogSystemMgr::Instance()->RegisterLogModule(E_DEMO_THREAD_ID, E_DEMO_THREAD_STR))
    {
    	std::string strError;
    	CLogSystemMgr::Instance()->GetErrorInfo(strError);
    	MY_Error() << strError;
    }
    //设置单个模块的打印级别开关
    CLogSystemMgr::Instance()->EnableLogModuleLevel(E_DEMO_THREAD_ID, E_LOG_SYSTEM_LEVEL_DEBUG, true);
    CLogSystemMgr::Instance()->EnableLogModuleLevel(E_DEMO_THREAD_ID, E_LOG_SYSTEM_LEVEL_INFO, true);
    //设置单个模块的输出策略
    CLogSystemMgr::Instance()->EnableLogModuleShowInfo(E_DEMO_THREAD_ID, E_LOG_SYSTEM_SHOW_INFO_DATE| E_LOG_SYSTEM_SHOW_INFO_TIME| E_LOG_SYSTEM_SHOW_INFO_MILLISECOND| E_LOG_SYSTEM_SHOW_INFO_LOG_LEVEL| E_LOG_SYSTEM_SHOW_INFO_LOG_MODULE_ID| E_LOG_SYSTEM_SHOW_INFO_LOG_MODULE_NAME| E_LOG_SYSTEM_SHOW_INFO_DEBUG_INFO,true);
    //设置所有模块的输出策略
    CLogSystemMgr::Instance()->EnableLogModuleShowInfo(E_LOG_SYSTEM_SHOW_INFO_DEBUG_INFO,true);

1.2. 通过序列换XML来初始化日志库

	//传入配置文件地址 也可以使用上面那种直接调用函数的做法,看你实际情况使用
	std::string strError;
	std::string strPath = "./../Config/LogSystemConfig.xml";
	if (!InitLogMgr(strError,strPath))
	{
		qCritical() << strError.c_str();
	}

配置文件



    
        <重定向QT输出>true
        <远程控制 IP="127.0.0.1" port="22334">true
        
        <串口输出 SerialName="/dev/ttyS0" SerialPort="9600"/>
        
        <文件输出 FileName="Adsdp" dir="./../Log" OutMode="1" MaxFile="5" MaxSize="20"/>
        
        <日志模式 LogModelName="Global" LogModelID="0xffffffff">
            <输出格式 年月日="true" 时分秒="false" 毫秒="true" 日志级别="true" 模块ID="true" 模块名="false" 调试信息="false"/>
            <输出等级 MSG="true" Debug="false" Info="true" Warn="true" Error="true" Dump="false"/>
        
        <日志模式 LogModelName="Demo1" LogModelID="0x22">
            <输出格式 年月日="true" 时分秒="false" 毫秒="true" 日志级别="true" 模块ID="true" 模块名="false" 调试信息="false"/>
            <输出等级 MSG="true" Debug="false" Info="true" Warn="true" Error="true" Dump="false"/>
        
    

  1. 使用方法
	//自定义打印宏,打印到全局模块
	MY_Debug() << "默认模块没有开启 debug输入,所以这句话打不进去";
	MY_MSG() << "但是我可以使用MSG 打印,我还可以使用double" << 2.225;
	MY_MSG() < 
下载地址 
测试程序下载地址 

测试程序下载地址:https://download.csdn.net/download/luck_anan/85436103

源码下载地址

CSDN:
GitHub:
GitLab:

缺陷

因为要兼容Qt 所以这个库不是纯c++库 ,并且使用了qt的 容器队列 XML解析与QDateTime。

最后

本人才疏学浅,还有很多不足,欢迎各位指出,也请收下留情,勿喷。

转载请注明出处谢谢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号