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