我們在寫程序的時候通常會希望將一些信息記錄下來,方便我們進行日后的一些信息跟蹤,錯誤排查等等。比如:我們在進行數據庫操作的時候,我們通常希望知道現在是程序的哪一部分進行了數據庫的操作,所以我們會記錄下threadid + sql這樣的日志。但是通常我們都不情願自己進行log的封裝,這個時候我們就會想到使用第三方的庫,今天我們就說一下c++中的第三方庫----log4cpp,寫過java程序的同學們都長都會使用log4j這樣一個日志系統,其實log4cpp可以說是log4j對c++的一個擴展。
下面我們就學習一下log4cpp,首先說一下log4cpp的幾個大的組件,layouts,appenders,categories三大組件,大致的過程是這樣的,layouts負責進行日志輸出格式的限制,appenders負責進行數據輸出位置的限制,categories負責進行真正的日志處理,至於他們的詳細功能我們稍后會逐一詳細敘述。
- layouts: 負責進行輸出日志格式的限制,其中包含四個主要的類: Layout,BasicLayout,PatternLayout,SimpleLayout四個類,這四個類的UML圖如下:
Layout是一個頂層的抽象類,其他類都繼承子這個類。
-
- SimpleLayout: 以“優先級(priority) - 日志信息”格式顯示,由於顯示的信息過於簡單,所以通常都不願意使用這個模式。
- BasicLayout: 以“時間戳+優先級+categoriesName+“:”+Info來表示日志的相關信息。
- PatternLayout:可以使用類似於c語言的模式進行相關的參數設置,具體如下:
- %c: 指的是categories的name
- %d:指的是時間,但是可以具體制定時間的格式,制定的模式例如這樣: %d{%H:%M:%S,%l}
- %m: 指的是日志的消息
- %n: 指的是換行符,會根據平台的不同,使用不同的格式,對用戶透明
- %p: 優先級等等
- 具體情況可以參見log4cpp
- 設置的函數是Layout.setConversionPattern()
2. Appender: 我們設置的layout只是相當於設置了日志的模式,但是我們要將使用制定模式的日志打印到什么地方,那就需要用到Appender,下面我們簡單的介紹一下Appender的幾種類型:
-
-
- FileAppender: 用於將日志輸出到文件中
-