log4cplus使用(三)-日志重定向

摘要:
本文描述了qtwidget的log4cplus日志输出,qtwidget封装了serverSocket。Log4cplus支持用户定义的输出设备。它只需要从Appender或Appender子类继承并实现append成员方法。然后,在log4cplus初始化成功后,将用户定义的输出设备添加到记录器中。当用户向记录器输出信息时,记录器将遍历其所有输出设备,并在输出设备上以指定格式输出信息。

本文讲述的是log4cplus日志输出到qt widget,封装了serverSocket。
    log4cplus支持用户自定义输出设备,只需要继承自Appender,或者Appender子类,并实现append成员方法,然后在 log4cplus初始化成功之后,把自定义输出设备添加到logger中,当用户向logger中输出信息时,logger会遍历自身的所有输出设备, 并按输出设备上的指定格式输出信息。
    log4cplus是线程安全的,因此在多线程下可以放心使用

    在小工具编写的过程中,作者遇到了ESP Crash问题,在网上了找了好久的资料,也没搞好,后来当然是解决了,原因:我的小工具是用vs2013写的,log4cplus库使用vs2010编 译的,后来用vs2013编译了下log4cplus,小工具一切正常;不过log4cplus自带的事例代码却开始crash了(vs2010下正 常),后来网上各种百度、谷歌,发现有的人说这是vs2013的bug,反正是最后也没解决。
    小工具运行流程:启动小工具,开启接收远端连接线程W,这样不阻塞ui主线程,当接收线程收到远端连接时,开启收据接收子线程R,来和远端交互,每个线程 更新一个widget,当线程W关闭时,关闭掉所有由W创建的子线程R,然后关闭serverSocket。R线程接收的数据使用抛事件的方式传递给 widget,当然不是直接抛给widget,而是有一个专门处理事件的线程,接收各种不同的事件,然后通过信号槽,发送到指定窗口,窗口更新到界面上。

    效果如图1所示

log4cplus使用(三)-日志重定向第1张图1  

主要的类说明:

1、工作者线程,监听消息事件
class MessageListening : public QThread

2、帮助工作者线程处理业务的对象,用户监听客户端的连接请求
class Work : public QObject
工作者线程
class WorkThread : public QThread

3、工作者线程,监听消息事件
class MessageListening : public QThread

4、服务器端线程,负责和客户端进行交互
class ClientThread : public log4cplus::thread::AbstractThread

5、小工具主窗口 负责接收并显示日志信息
class debugHelper : public QWidget

6、用户列表,显示当前连接的用户+默认+创建的用户
class CCUserListWidget : public QTreeWidget

7、自定义输出设备
class CCUIAppender : public ConsoleAppender

8、日志过滤数据源 负责提供给视图过滤后的数据,数据源来自QStandardItemModel
class CCSortFilterProxyModel : public QSortFilterProxyModel

9、日志窗口 针对每个用户new一个
class CCLogTableWidget : public QWidget

10、本地日志加载创建 用于比对多个不同来源的日志
class CCLogListWidget : public QWidget

如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

 
log4cplus使用(三)-日志重定向第2张log4cplus使用(三)-日志重定向第3张

  


很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。 

奋斗中的无名小卒。。。

免责声明:文章转载自《log4cplus使用(三)-日志重定向》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Grafana与Prometheus集成(四)算法名称 Alias Method下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

进程隐藏的实现

通过Hook SSDT (System Service Dispatch Table) 隐藏进程1.原理介绍: Windows操作系统是一种分层的架构体系。应用层的程序是通过API来访问操作系统。而API又是通过ntdll里面的核心API来进行系统服务的查询。核心API通过对int 2e的切换,从用户模式转换到内核模式。2Eh中断的功能是通过NTOSKRN...

Java多线程-线程的调度(合并)

线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下:void join(): 等待该线程终止。void join(long millis): 等待该线程终止的时间最长为 millis 毫秒。void join(long millis,...

wrk性能测试(详解)

一、简介   wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。 wrk是开源的, 代码在 github 上:https://github.com/wg/wrk 安装:https://www.cnblog...

Kafka网络模型

摘要:很多人喜欢把RocketMQ与Kafka做对比,其实这两款消息队列的网络通信层还是比较相似的,本文就为大家简要地介绍下Kafka的NIO网络通信模型,通过对Kafka源码的分析来简述其Reactor的多线程网络通信模型和总体框架结构,同时简要介绍Kafka网络通信层的设计与具体实现。 一、Kafka网络通信模型的整体框架概述 Kafka的网络通信模型...

轻量级锁,偏向锁,重量级锁

轻量级锁,偏向锁,重量级锁 参考视频:https://www.bilibili.com/video/BV16J411h7Rd 对象头信息: normal,正常对象,使用markwork的最后3bits来标记,001就表示正常对象 Biased,偏向锁标记,使用markwork的最后3bits来标记,跟正常对象虽然有区别,但区别不大,101就表示偏向锁...

【STM32F429】第3章 ThreadX操作系统介绍

论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第3章   ThreadX操作系统介绍 本章节介绍 ThreadX 操作系统,让大家对 ThreadX 有一个整体的了解。 3.1 初学者重要提示 3.2 Express Logic公司介绍 3.3 Thread...