以前是看過的,后來由于沒用又忘光了。現在又重新看,好浪費時間。
費話不多說。
Log4cplus 概述
首先,log4cplus是一個日志記錄的庫,目的很簡單,就是把合適的信息送到正確的位置上去。
Log4cplus 由4部分組成:
1>Logger 日志模塊,程序中唯一一個必須得使用的模塊,解決了在哪里使用日志的問題
2> Appenders 接收日志的各個設備,如控制臺、文件、網絡等。解決了輸出到哪里去的問題
3>Layout 格式化輸出信息,解決了如何輸出的問題。
4>Filter 過濾器,解決哪些信息需要輸出的問題,比如DEBUG,WARR,INFO等的輸出控制.
Log4cplus的主要部件關系圖如下:
Log4cplus格式化輸出字符串
來源:http://log4cplus.sourceforge.net/docs/html/classlog4cplus_1_1PatternLayout.html
http://www.shnenglu.com/tx7do/articles/11717.html
關于預定義標識符,log4cplus文檔中提供了詳細的格式說明,我每種都試了一下,以上述代碼為例,根據不同
的pattern,各種消息格式使用情況列舉如下:
(1)"%%",轉義為%, 即,std::string pattern = "%%" 時輸出: "%"
(2)"%c",輸出logger名稱,比如std::string pattern ="%c" 時輸出: "test_logger.subtest",
也可以控制logger名稱的顯示層次,比如"%c{1}"時輸出"test_logger",其中數字表示層次。
(3)"%D",顯示本地時間,當std::string pattern ="%D" 時輸出:"2004-10-16 18:55:45",%d顯示標準時間,
所以當std::string pattern ="%d" 時輸出 "2004-10-16 10:55:45" (因為我們是東8區,差8個小時啊)。
可以通過%d{...}定義更詳細的顯示格式,比如%d{%H:%M:%s}表示要顯示小時:分鐘:秒。大括號中可顯示的
預定義標識符如下:
%a -- 表示禮拜幾,英文縮寫形式,比如"Fri"
%A -- 表示禮拜幾,比如"Friday"
%b -- 表示幾月份,英文縮寫形式,比如"Oct"
%B -- 表示幾月份,"October"
%c -- 標準的日期+時間格式,如 "Sat Oct 16 18:56:19 2004"
%d -- 表示今天是這個月的幾號(1-31)"16"
%H -- 表示當前時刻是幾時(0-23),如 "18"
%I -- 表示當前時刻是幾時(1-12),如 "6"
%j -- 表示今天是哪一天(1-366),如 "290"
%m -- 表示本月是哪一月(1-12),如 "10"
%M -- 表示當前時刻是哪一分鐘(0-59),如 "59"
%p -- 表示現在是上午還是下午, AM or PM
%q -- 表示當前時刻中毫秒部分(0-999),如 "237"
%Q -- 表示當前時刻中帶小數的毫秒部分(0-999.999),如 "430.732"
%S -- 表示當前時刻的多少秒(0-59),如 "32"
%U -- 表示本周是今年的第幾個禮拜,以周日為第一天開始計算(0-53),如 "41"
%w -- 表示禮拜幾,(0-6, 禮拜天為0),如 "6"
%W -- 表示本周是今年的第幾個禮拜,以周一為第一天開始計算(0-53),如 "41"
%x -- 標準的日期格式,如 "10/16/04"
%X -- 標準的時間格式,如 "19:02:34"
%y -- 兩位數的年份(0-99),如 "04"
%Y -- 四位數的年份,如 "2004"
%Z -- 時區名,比如 "GMT"
(4)"%F",輸出當前記錄器所在的文件名稱,比如std::string pattern ="%F" 時輸出: "main.cpp"
(5)"%L",輸出當前記錄器所在的文件行號,比如std::string pattern ="%L" 時輸出: "51"
(6)"%l",輸出當前記錄器所在的文件名稱和行號,比如std::string pattern ="%L" 時輸出:
"main.cpp:51"
(7)"%m",輸出原始信息,比如std::string pattern ="%m" 時輸出: "teststr",即上述代碼中
LOG4CPLUS_DEBUG的第二個參數,這種實現機制可以確保原始信息被嵌入到帶格式的信息中。
(8)"%n",換行符,沒什么好解釋的
(9)"%p",輸出LogLevel,比如std::string pattern ="%p" 時輸出: "DEBUG"
(10)"%t",輸出記錄器所在的線程ID,比如std::string pattern ="%t" 時輸出: "1075298944"
(11)"%x",嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,NDC可以用對
不同源的log信息(同時地)交叉輸出進行區分,關于NDC方面的詳細介紹會在下文中提到。
(12)格式對齊,比如std::string pattern ="%-10m"時表示左對齊,寬度是10,此時會輸出"teststr ",當
然其它的控制字符也可以相同的方式來使用,比如"%-12d","%-5p"等等(剛接觸log4cplus文檔時還以為
"%-5p"整個字符串代表LogLevel呢,呵呵)。
Log4cplus 配置文件
在log4cplus中的配制文件基本與log4j的配置文件一樣。
以下面為例
log4cplus.rootLogger=INFO, STDOUT, R
log4cplus.logger.test=WARN
log4cplus.logger.test.log_1=FATAL
log4cplus.logger.test.log_2=FATAL
log4cplus.logger.test.log_3=WARN
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n
log4cplus.rootLogger= INFO, STDOUT, R
其中第一個INFO是等級,從大到小包括 <!--[if !vml]-->
<!--[endif]-->
OFF、FATAL、ERROR 、WARN 、INFO、DEBUG 、TRACE、ALL
后面STDOUT與R都是自定義的appender名稱,表示該日志將會輸出到哪幾個appender中去。
Log4cplus 安裝
Log4cplus 在中的使用
LOG4CPLUS_TRACE
LOG4CPLUS_DEBUG
LOG4CPLUS_INFO
LOG4CPLUS_WARN
LOG4CPLUS_ERROR
LOG4CPLUS_FATAL
相關資料
Log4cplus是從java中的日志log4j那里移植過來的一個日志庫。
http://www.shnenglu.com/tx7do/articles/11715.html
http://www.blogjava.net/zJun/archive/2006/06/28/55511.html
http://log4cplus.sourceforge.net/hello_world.html
剩余的就在 log4cplus 的 test目錄下看看吧。
posted on 2009-02-17 21:08
鹿哥 閱讀(5799)
評論(0) 編輯 收藏 引用 所屬分類:
LOG4CPLUS