本文讲述的是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. 在ideaUI中建立maven项目

    1.新建New 注意:第一次创建maven项目需要在有网情况下进行 2.可以看见我们建立的项目了

  2. 难受的ESlint语法检测

    相信写过vue的各位小白都有过这样的体验,明明引入的文件语法是对的,明明自己写的代码是对的,但是总会报语法错误,没错,就是ESlint代码检测搞的鬼, 就算你在注释后面多打一个空格,它都会去搞事情,简 ...

  3. python基础day1

    一.python介绍 1.1简介 Python  (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum ...

  4. 应用中对APK进行安装

    权限 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> //允 ...

  5. Vagrant 安装以及private_network配置

    (需先安装virtuabox,vagrant) 1.下载centos 7 镜像,vagrant box add ceshi 镜像名 或者是使用先前vagrant package出来的box,进行加载镜 ...

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

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

  7. 【spring】-- springboot配置全局异常处理器

    一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句 ...

  8. centos6.5使用Google auth进行双因子认证

    1.环境 系统:centos6.5 x86_64 [root@uu ~]# uname -a Linux uu 2.6.32-642.el6.x86_64 #1 SMP Wed Apr 13 00:5 ...

  9. python用类实现xrange

    class xrange(object): def __init__(self, start, end=0, step=1): self.start = start self.end = end se ...

  10. (转)CentOS7中防火墙的基本操作

    目录 1.firewalld简介 2.安装firewalld 3.运行.停止.禁用firewalld 4.配置firewalld 5 打开端口 学习apache安装的时候需要打开80端口,由于cent ...