C++ 技術(shù)中心
::
首頁
::
聯(lián)系
:: ::
管理
160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks
公告
鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權(quán)利。必須經(jīng)過作者本人同意后方可轉(zhuǎn)載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com
留言簿
(27)
給我留言
查看公開留言
查看私人留言
隨筆分類
C++ STL(2)
C++ 基礎(chǔ)(31)
Delphi(2)
Linux 編程(29)
Linux 操作(22)
MSSQL(1)
MYSQL(21)
Oracle
python編程(1)
UML(3)
Windows 編程(10)
Windows 網(wǎng)絡(luò)編程(6)
工具(1)
其他編程(11)
其他生活類
三方庫(5)
生活(7)
五線譜(1)
游戲開發(fā)(14)
隨筆檔案
2020年5月 (2)
2017年12月 (1)
2017年11月 (1)
2017年9月 (1)
2017年8月 (1)
2017年7月 (1)
2017年6月 (3)
2017年4月 (2)
2017年3月 (3)
2016年6月 (1)
2016年1月 (1)
2015年12月 (2)
2015年5月 (1)
2015年2月 (1)
2014年12月 (2)
2014年11月 (4)
2014年9月 (2)
2014年8月 (1)
2014年7月 (1)
2014年6月 (3)
2014年5月 (1)
2014年4月 (1)
2014年3月 (1)
2013年12月 (5)
2013年11月 (2)
2013年10月 (1)
2013年9月 (9)
2013年8月 (6)
2013年7月 (11)
2013年6月 (5)
2013年4月 (8)
2013年3月 (4)
2013年1月 (3)
2012年12月 (5)
2012年11月 (2)
2012年10月 (5)
2012年9月 (7)
2012年8月 (7)
2012年7月 (1)
2012年6月 (1)
2012年5月 (1)
2012年3月 (11)
2012年2月 (1)
2011年12月 (1)
2011年11月 (1)
2011年10月 (1)
2011年9月 (1)
2011年8月 (1)
2011年7月 (1)
2011年6月 (2)
2011年4月 (11)
2011年3月 (9)
搜索
最新隨筆
1.?origin游戲服務(wù)器引擎介紹
2.?golang游戲服務(wù)器引擎
3.?套接字read/write返回值
4.?關(guān)于linux信號總結(jié)
5.?A*算法實(shí)現(xiàn)
6.?vc內(nèi)存地址填充
7.?c++函數(shù)throw()
8.?EA類的關(guān)系
9.?游戲服務(wù)器相關(guān)討論(轉(zhuǎn))
10.?C/C++中volatile與 mutable,explicit 關(guān)鍵字詳解
最新評論
1.?re: 10個(gè)C++11特性
std::move() 解除引用,提供效率,所謂的右值處理,一開始也沒看明白,后來覺得有這個(gè)挺好
--放屁阿狗
2.?re: A*算法實(shí)現(xiàn)
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--放屁阿狗
3.?re: 內(nèi)存泄露監(jiān)控報(bào)告
用 BoundsChecker 吧,原理大家都懂但是自己做沒必要(盜版滴)
--萬連文
4.?re: vc內(nèi)存地址填充
你看的不全啊,0xcc表示是指令碼:int 3,也就是軟中斷,
--冬瓜
5.?re: 10個(gè)C++11特性
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--lz
評論排行榜
1.?一個(gè)封裝好的線程類(7)
2.?字符串格式化防止數(shù)組越界(6)
3.?格式化字符串(6)
4.?關(guān)于warning C4819(5)
5.?CodeLite 出現(xiàn)中文亂碼問題(4)
log4cplus庫(二)(通過布局器Layouts)
一.各種布局器
log4cplus通過布局器(Layouts)來控制輸出的格式,log4cplus提供了三種類型的Layouts分別是:
SimpleLayout、PatternLayout、和TTCCLayout。
二.SimpleLayout
是一種簡單格式的布局器,在輸出的原始信息之前加上LogLevel和一個(gè)"-"。
比如以下代碼片段:
//
step 1: Instantiate an appender object
SharedObjectPtr _append (
new
ConsoleAppender());
_append
->
setName(
"
append for test
"
);
//
step 2: Instantiate a layout object
std::auto_ptr _layout(
new
log4cplus::SimpleLayout());
//
step 3: Attach the layout object to the appender
_append
->
setLayout( _layout );
//
step 4: Instantiate a logger object
Logger _logger
=
Logger::getInstance(
"
test
"
);
//
step 5: Attach the appender object to the logger
_logger.addAppender(_append);
//
log activity
LOG4CPLUS_DEBUG(_logger,
"
This is the simple formatted log message
"
)
將打印結(jié)果:DEBUG
-
This
is
the simple formatted log message
三. PatternLayout
是一種有詞法分析功能的模式布局器,一提起模式就會想起正則表達(dá)式,
這里的模式和正則表達(dá)式類似,但是遠(yuǎn)比后者簡單,能夠?qū)︻A(yù)定義的標(biāo)識符
(稱為conversion specifiers)進(jìn)行解析,轉(zhuǎn)換成特定格式輸出。以下代碼
片段演示了如何使用PatternLayout:
//
step 1: Instantiate an appender object
SharedObjectPtr _append (
new
ConsoleAppender());
_append
->
setName(
"
append for test
"
);
//
step 2: Instantiate a layout object
std::
string
pattern
=
"
%d{%m/%d/%y %H:%M:%S} - %m [%l]%n
"
;
std::auto_ptr _layout(
new
PatternLayout(pattern));
//
step 3: Attach the layout object to the appender
_append
->
setLayout( _layout );
//
step 4: Instantiate a logger object
Logger _logger
=
Logger::getInstance(
"
test_logger.subtest
"
);
//
step 5: Attach the appender object to the logger
_logger.addAppender(_append);
//
log activity
LOG4CPLUS_DEBUG(_logger,
"
teststr
"
)
輸出結(jié)果:
10
/
16
/
04
18
:
51
:
25
-
teststr [main.cpp:
51
]
可以看出通過填寫特定格式的模式字符串"pattern",原始信息被包含到一堆有格式的信息當(dāng)中了,
這就使得用戶可以根據(jù)自身需要來定制顯示內(nèi)容。"pattern"可以包含普通字符串和預(yù)定義的標(biāo)識符,
其中:(
1)普通字符串,能夠被直接顯示的信息。
2)預(yù)定義標(biāo)識符,通過"%"與一個(gè)或多個(gè)字符共同構(gòu)成預(yù)定義的標(biāo)識符,能夠產(chǎn)生出特定格式信息。
關(guān)于預(yù)定義標(biāo)識符,log4cplus文檔中提供了詳細(xì)的格式說明,我每種都試了一下,以上述代碼為例,
根據(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í)啊)。
可以通過%d{...}定義更詳細(xì)的顯示格式,比如%d{%H:%M:%s}表示要顯示小時(shí):分鐘:秒。大括號中可顯示的
預(yù)定義標(biāo)識符如下:%a -- 表示禮拜幾,英文縮寫形式,比如"Fri"%A -- 表示禮拜幾,比如"Friday"%b -- 表示幾月份,
英文縮寫形式,
比如"Oct"%B -- 表示幾月份,"October"%c -- 標(biāo)準(zhǔn)的日期+時(shí)間格式,
如 "Sat Oct 16 18:56:19 2004"%d -- 表示今天是這個(gè)月的幾號(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)前記錄器所在的文件行號,比如std::string pattern ="%L" 時(shí)輸出: "51"
(6)"%l",輸出當(dāng)前記錄器所在的文件名稱和行號,比如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可以用對
不同源的log信息(同時(shí)地)交叉輸出進(jìn)行區(qū)分,關(guān)于NDC方面的詳細(xì)介紹會在下文中提到。
(12)格式對齊,比如std::string pattern ="%-10m"時(shí)表示左對齊,寬度是10,此時(shí)會輸出"teststr ",當(dāng)
然其它的控制字符也可以相同的方式來使用,比如"%-12d","%-5p"等等(剛接觸log4cplus文檔時(shí)還以為
"%-5p"整個(gè)字符串代表LogLevel呢,呵呵)。
四. TTCCLayout
是在PatternLayout基礎(chǔ)上發(fā)展的一種缺省的帶格式輸出的布局器, 其格式由時(shí)間,線程ID,Logger和NDC 組成
。提供給那些想顯示典型的信息(一般情況下夠用了)又懶得配置pattern的同志們。
TTCCLayout在構(gòu)造時(shí)有機(jī)會選擇顯示本地時(shí)間或GMT時(shí)間,缺省是按照本地時(shí)間顯示:
TTCCLayout::TTCCLayout(bool use_gmtime = false)
以下代碼片段演示了如何使用TTCCLayout:
//
step 1: Instantiate an appender object
SharedObjectPtr _append (
new
ConsoleAppender());
_append
->
setName(
"
append for test
"
);
//
step 2: Instantiate a layout object
std::auto_ptr _layout(
new
TTCCLayout());
//
step 3: Attach the layout object to the appender
_append
->
setLayout( _layout );
//
step 4: Instantiate a logger object
Logger _logger
=
Logger::getInstance(
"
test_logger
"
);
//
step 5: Attach the appender object to the logger
_logger.addAppender(_append);
//
log activity
LOG4CPLUS_DEBUG(_logger,
"
teststr
"
)
輸出結(jié)果:
10
-
16
-
04
19
:
08
:
27
,
501
[
1075298944
] DEBUG test_logger
<>
-
teststr
當(dāng)構(gòu)造TTCCLayout對象時(shí)選擇GMT時(shí)間格式時(shí):
//
step 2: Instantiate a layout object
std::auto_ptr _layout(
new
TTCCLayout(
true
));
輸出結(jié)果:
10
-
16
-
04
11
:
12
:
47
,
678
[
1075298944
] DEBUG test_logger
<>
-
teststr
*/
posted on 2011-04-02 15:43
C++技術(shù)中心
閱讀(3615)
評論(0)
編輯
收藏
引用
所屬分類:
三方庫
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
memcached安裝
log4cplus庫(四)(優(yōu)先級與日志配置)
log4cplus庫(三)(將日志寫入到文件)
log4cplus庫(二)(通過布局器Layouts)
log4cplus庫(一)(簡單使用)
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright @ C++技術(shù)中心
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster
久久精品青青草原伊人
|
狠狠色丁香久久综合五月
|
久久精品免费网站网
|
区亚洲欧美一级久久精品亚洲精品成人网久久久久
|
亚洲AⅤ优女AV综合久久久
|
2019久久久高清456
|
久久夜色精品国产噜噜噜亚洲AV
|
久久天天躁狠狠躁夜夜2020一
|
亚洲中文久久精品无码
|
久久婷婷国产麻豆91天堂
|
久久经典免费视频
|
国产精品女同一区二区久久
|
久久人人爽人人爽人人片AV不
|
色欲久久久天天天综合网精品
|
久久婷婷五月综合97色直播
|
伊人久久大香线蕉成人
|
国产成人综合久久精品尤物
|
久久精品国产亚洲AV蜜臀色欲
|
国产三级久久久精品麻豆三级
|
欧美精品福利视频一区二区三区久久久精品
|
香蕉久久一区二区不卡无毒影院
|
三级片免费观看久久
|
91麻豆精品国产91久久久久久
|
性高湖久久久久久久久
|
亚洲精品NV久久久久久久久久
|
亚洲国产精品久久久久久
|
精品久久久久久国产潘金莲
|
久久亚洲熟女cc98cm
|
色8激情欧美成人久久综合电
|
国内精品久久久久久麻豆
|
亚洲午夜久久久精品影院
|
久久久久夜夜夜精品国产
|
91视频国产91久久久
|
狠色狠色狠狠色综合久久
|
精品熟女少妇av免费久久
|
久久九九精品99国产精品
|
久久久久久久久无码精品亚洲日韩
|
国产精品久久久久a影院
|
思思久久99热只有频精品66
|
伊人色综合九久久天天蜜桃
|
亚洲精品视频久久久
|