本文讲述的是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所示

图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使用(三)-日志重定向的更多相关文章

  1. Qt 之 qInstallMessageHandler(日志重定向至文件)

    Qt 日志重定向到文件 #include <QCoreApplication> #include <QDebug> #include <QMutex> #inclu ...

  2. weblogic启动时日志重定向(nohup.out)

    由于weblogic使用  nohup ./startWebLogic.sh &   启动时会将所有日志打印到nohup.out上,长此以往会导致该文件越来越大,不便于管理. 故下面介绍如何重 ...

  3. 使用System.out.printf()输出日志重定向到文件后显示混乱问题

    写了一个小工具,使用System.out.printf()输出日志,以方便使用者查看,在终端显示没有问题,但重定向到文件就有问题了,会出现一些很奇怪的乱序现象. 上网查询资料,判断应该是跟重定向和Li ...

  4. [译]如何将docker日志重定向到单个文件里

    原文来源: how-to-redirect-docker-logs-to-a-single-file 问题: 我想把某一个docker的log全部导出到一个文件里进行分析,我该怎么做? 其实不用那样操 ...

  5. shell脚本在后台运行以及日志重定向输出

    后台运行命令 在命令行后加上 &,表示进程到后台中执行,如:cmd & 日志输出重定向 如:cmd > out.log & Linux默认定义两个变量:1和2: 1 表示 ...

  6. ios 将Log日志重定向输出到文件中保存

    对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...

  7. SecurityCRT输出日志重定向

    使用CRT进行抓取log,因为工具本省缓冲区有限,导致,刷屏特别快,可能会错过一些log,可以对CRT的log进行增加输出源,或者说将输出到控制台的log再输出到本地文件中: 文件->点击(勾选 ...

  8. 实现jul 日志重定向到 slf4j

    需求背景 jul 指的是java.util.logging,是 java 内置的日志模块,目前流行的Java日志组件还包括 jcl(common-logging).slf4j/log4j/logbac ...

  9. log4j日志重定向

    配置相应的类名或者包名,将日志重新定向到输入文件里 log4j.rootLogger=INFO,DEBUG,CONSOLE ##过滤日志 log4j.logger.[类名|包名]=INFO,[输出目的 ...

随机推荐

  1. 业务线接入前端异常监控sentry

    1.前端异常处理的框架对比   是否开源 收费 语言 监控范围 sentry 是 自己搭建服务器(免费)价格 英文 Angular.AngularJs.Backbone.Ember.JavaScrip ...

  2. 绕最新版安全狗-附上sqlmap的tamper

    在t00ls 里面我发的,放博客分享 记录一下 小菜写文章,太菜 希望大佬放过我!  主要分享一下,绕狗的思路环境:windows7 + phpstudy + safedog v4.0  + Mysq ...

  3. HBase数据库增删改查常用命令操作

    最近测试用到了Hbase数据库,新建一个学生表,对表进行增删改查操作,把常用命令贴出来分享给大家~ 官方API:https://hbase.apache.org/book.html#quickstar ...

  4. D3---01基础的柱状图制作(转)

    ---文章转自 http://d3.decembercafe.org/index.html  ,Created by 十二月咖啡馆. 一个完整的柱形图包含三部分:矩形.文字.坐标轴. 首先要布置一个大 ...

  5. tensorflow 使用 3 模型学习

    模型学习 import tensorflow as tf import numpy as np # 生成 100 个随机的点 x_data = np.random.rand( 100 ) y_data ...

  6. 匿名函数 javascript

    匿名函数: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  7. jieba库与好玩的词云的学习与应用实现

    经过了一些学习与一些十分有意义的锻(zhe)炼(mo),我决定尝试一手新接触的python第三方库 ——jieba库! 这是一个极其优秀且强大的第三方库,可以对一个文本文件的所有内容进行识别,分词,甚 ...

  8. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别

    二.也是平时经常用到的offsetheight 它返回的高度是内容高+padding+边框,但是注意哦,木有加margin哦,当然一般也木有啥需要把margin加进去的,以上代码为例,结果显示上图h2 ...

  9. hashlib 模块

    import hashlib # ob = hashlib.md5() # ob.update("admin".encode("utf-8")) # print ...

  10. Python3.6 连接MySQL(二)转载

    安装mysqlclient库 错误:OSError: mysql_config not found 解决:  方案一 ln -s /usr/local/mysql/bin/mysql_config / ...