《QT实用小工具·二十五》日志重定向输出

1、概述
源码放在文章末尾

日志重定向输出,包含如下功能:

  1. 支持动态启动和停止。
  2. 支持日志存储的目录。
  3. 支持网络发出打印日志。
  4. 支持输出日志上下文信息比如所在代码文件、行号、函数名等。
  5. 支持设置日志文件大小限制,超过则自动分文件,默认128kb。
  6. 支持按照日志行数自动分文件,和日志大小条件互斥。
  7. 可选按照日期时间区分文件名存储日志。
  8. 日志文件命名规则优先级:行数》大小》日期。
  9. 自动加锁支持多线程。
  10. 可以分别控制哪些类型的日志需要重定向输出。
  11. 支持Qt4+Qt5+Qt6,开箱即用。
  12. 使用方式最简单,调用函数start()启动服务,stop()停止服务。

下面是demo演示:
在这里插入图片描述

项目部分代码如下:

#ifndef SAVELOG_H
#define SAVELOG_H/*** 日志重定向输出* 1. 支持动态启动和停止。* 2. 支持日志存储的目录。* 3. 支持网络发出打印日志。* 4. 支持输出日志上下文信息比如所在代码文件、行号、函数名等。* 5. 支持设置日志文件大小限制,超过则自动分文件,默认128kb。* 6. 支持按照日志行数自动分文件,和日志大小条件互斥。* 7. 可选按照日期时间区分文件名存储日志。* 8. 日志文件命名规则优先级:行数》大小》日期。* 9. 自动加锁支持多线程。* 10. 可以分别控制哪些类型的日志需要重定向输出。* 11. 支持Qt4+Qt5+Qt6,开箱即用。* 12. 使用方式最简单,调用函数start()启动服务,stop()停止服务。*/#include <QObject>class QFile;
class QTcpSocket;
class QTcpServer;//消息类型
enum MsgType {MsgType_Debug = 0x0001,MsgType_Info = 0x0002,MsgType_Warning = 0x0004,MsgType_Critical = 0x0008,MsgType_Fatal = 0x0010,
};#ifdef quc
class Q_DECL_EXPORT SaveLog : public QObject
#else
class SaveLog : public QObject
#endif{Q_OBJECT
public:static SaveLog *Instance();explicit SaveLog(QObject *parent = 0);~SaveLog();private:static QScopedPointer<SaveLog> self;//是否在运行bool isRun;//文件最大行数 0表示不启用int maxRow, currentRow;//文件最大大小 0表示不启用 单位kbint maxSize;//是否重定向到网络bool toNet;//是否输出日志上下文bool useContext;//文件对象QFile *file;//日志文件路径QString path;//日志文件名称QString name;//日志文件完整名称QString fileName;//消息类型MsgType msgType;private:void openFile(const QString &fileName);public:bool getUseContext();MsgType getMsgType();Q_SIGNALS://发送内容信号void send(const QString &content);public Q_SLOTS://启动日志服务void start();//暂停日志服务void stop();//清空状态void clear();//保存日志void save(const QString &content);//设置日志文件最大行数void setMaxRow(int maxRow);//设置日志文件最大大小 单位kbvoid setMaxSize(int maxSize);//设置监听端口void setListenPort(int listenPort);//设置是否重定向到网络void setToNet(bool toNet);//设置是否输出日志上下文void setUseContext(bool useContext);//设置日志文件存放路径void setPath(const QString &path);//设置日志文件名称void setName(const QString &name);//设置消息类型void setMsgType(const MsgType &msgType);
};#ifdef quc
class Q_DECL_EXPORT SendLog : public QObject
#else
class SendLog : public QObject
#endif{Q_OBJECT
public:static SendLog *Instance();explicit SendLog(QObject *parent = 0);~SendLog();private:static QScopedPointer<SendLog> self;//监听端口int listenPort;//网络通信对象QTcpSocket *socket;//网络监听服务器QTcpServer *server;private slots://新连接到来void newConnection();public Q_SLOTS://设置监听端口void setListenPort(int listenPort);//启动和停止服务void start();void stop();//发送日志void send(const QString &content);
};#endif // SAVELOG_H

源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620837.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费插件集-illustrator插件-Ai插件-批量替换链接图

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行批量替换链接图。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&am…

ZISUOJ 数据结构-栈

题目列表&#xff1a; 问题 A: 数据结构-栈-括号匹配 思路&#xff1a; 遇到左半边括号&#xff0c;将其入栈&#xff0c;遇到右半边括号&#xff0c;则先判断栈是否为空&#xff0c;若为空&#xff0c;则匹配失败&#xff0c;若不为空&#xff0c;则再判断栈顶元素是否是与之匹…

宝塔面板部署腾讯云的域名

一、腾讯云&#xff0c;搜索我的证书&#xff0c;点击打开如图所示&#xff0c;点击下砸 二、点击宝塔的证书&#xff0c;然后下载到桌面 三、解压 四、打开宝塔&#xff0c;网站》自己的项目列表中要绑定的ssl 五、对应的文件内容复制进去&#xff0c;保存并启用证书 六、有了…

快速掌握Spring监控(Spring Boot admin)

监控 监控可视化监控平台Admin底层逻辑info 自定义端点 监控 监控的作用&#xff1a; 监控服务状态是否宕机监控服务运行指标&#xff08;内存&#xff0c;虚拟机&#xff0c;线程&#xff0c;请求等&#xff09;监控日志管理服务&#xff08;服务下线&#xff09; 监控的实…

查看 Linux 接入的 USB 设备速率是 USB2 还是 USB3

查看接入 usb 设备的速率 使用以下命令查看接入的 USB 设备速率&#xff08;每一行最后的 xxM 字样&#xff09;。插入设备前查看一次&#xff0c;插入设备后查看一次&#xff0c;对比即可定位到刚插入的设备是哪一条。 lsusb -t命令输出如下图 对照 USB 速率表 对照 USB 速…

限制登录Linux服务器的几种方式

一.第一种方法 通过修改TCP Wrappers服务访问控制来实现限制登录Linux 1.这里以sshd服务为例&#xff0c;配置完成后&#xff0c;只允许配置允许的IP才能ssh连接本机服务器&#xff0c;其他IP拒绝判断某一个基于tcp协议的服务是否支持tcp_wrapper&#xff0c;要先判断它是否支…

关注招聘 关注招聘 关注招聘

&#x1f525;关注招聘 &#x1f525;关注招聘 &#x1f525;关注招聘 &#x1f525;开源产品&#xff1a; 1.农业物联网平台开源版 2.充电桩系统开源版 3.GPU池化软件(AI人工智能训练平台/推理平台) 开源版 产品销售&#xff1a; 1.农业物联网平台企业版 2.充电桩系统企业…

TinyEMU源码分析之中断处理

TinyEMU源码分析之中断处理 1 触发中断2 查询中断2.1 查询中断使能与pending状态&#xff08;mie和mip&#xff09;2.2 查询中断总开关与委托&#xff08;mstatus和mideleg&#xff09;2.2.1 M模式2.2.2 S模式2.2.3 U模式 3 处理中断3.1 获取中断编号3.2 检查委托3.3 进入中断3…

【C++】3.类和对象(中)

一、类的6个默认成员函数 在上一篇博客中&#xff0c;我们计算了空类的大小为 1 。那么空类中真的什么东西都没有吗&#xff1f;其实不是的&#xff0c;当一个类在什么都不写的时候就会自动生成6个默认的成员函数&#xff08;用户没有写&#xff0c;但是编译器自动生成的成员函…

vue--双向数据绑定原理

Vue采用数据劫持 发布者-订阅者模式实现双向数据绑定&#xff0c;实现逻辑图如下所示&#xff1a; 数据劫持 Vue 借助Object.defineProperty()来劫持各个属性&#xff0c;这样一来属性存取过程都会被监听到 发布者-订阅者模式 主要实现三个对象&#xff1a;Observer&#…

详解IP证书申请

申请IP证书&#xff0c;也被称为IP SSL证书&#xff0c;是一种特殊的SSL证书&#xff0c;它不同于传统的域名验证&#xff08;DV&#xff09;证书&#xff0c;是通过验证公网IP地址而不是域名来确保安全连接。这种证书用于保护IP地址&#xff0c;并在安装后起到加密作用。以下是…

Java对接第三方接口C#语言 请求是xml格式方式

文章目录 目录 文章目录 安装流程 小结 概要写法流程技术细节小结 概要 实现方式通过标签方式获取一个Body内标签的信息一步一步解析到需要获取到的数据信息 写法流程 技术细节 先和对面对接项目的开发拿到postman接口数据信息&#xff0c;然后再本地跑通接口&#xff0c;再进…