程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> log4cplus使用(三)-日志重定向,log4cplus重定向

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

編輯:C++入門知識

log4cplus使用(三)-日志重定向,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所示

圖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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved