C++ 技术中心
::
首页
::
联系
:: ::
管理
160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks
公告
郑重声明:本BLOG所发表的原创文章,作者保留一切权利。必须经过作者本人同意后方可转载,并注名作者(天空)和出处(CppBlog.com)。作者Email:coder@luckcoder.com
留言簿
(27)
给我留言
查看公开留言
查看私人留言
随笔分类
C++ STL(2)
C++ 基础(31)
Delphi(2)
Linux 编程(29)
Linux 操作(22)
MSSQL(1)
MYSQL(21)
Oracle
python编程(1)
UML(3)
Windows 编程(10)
Windows 网络编程(6)
工具(1)
其他编程(11)
其他生活类
三方库(5)
生活(7)
五线谱(1)
游戏开发(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游戏服务器引擎介绍
2. golang游戏服务器引擎
3. 套接字read/write返回值
4. 关于linux信号总结
5. A*算法实现
6. vc内存地址填充
7. c++函数throw()
8. EA类的关系
9. 游戏服务器相关讨论(转)
10. C/C++中volatile与 mutable,explicit 关键字详解
最新评论
1. re: 10个C++11特性
std::move() 解除引用,提供效率,所谓的右值处理,一开始也没看明白,后来觉得有这个挺好
--放屁阿狗
2. re: A*算法实现
评论内容较长,点击标题查看
--放屁阿狗
3. re: 内存泄露监控报告
用 BoundsChecker 吧,原理大家都懂但是自己做没必要(盗版滴)
--万连文
4. re: vc内存地址填充
你看的不全啊,0xcc表示是指令码:int 3,也就是软中断,
--冬瓜
5. re: 10个C++11特性
评论内容较长,点击标题查看
--lz
评论排行榜
1. 一个封装好的线程类(7)
2. 格式化字符串(6)
3. 字符串格式化防止数组越界(6)
4. 关于warning C4819(5)
5. CodeLite 出现中文乱码问题(4)
log4cplus库(二)(通过布局器Layouts)
一.各种布局器
log4cplus通过布局器(Layouts)来控制输出的格式,log4cplus提供了三种类型的Layouts分别是:
SimpleLayout、PatternLayout、和TTCCLayout。
二.SimpleLayout
是一种简单格式的布局器,在输出的原始信息之前加上LogLevel和一个"-"。
比如以下代码片段:
//
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
"
)
将打印结果:DEBUG
-
This
is
the simple formatted log message
三. PatternLayout
是一种有词法分析功能的模式布局器,一提起模式就会想起正则表达式,
这里的模式和正则表达式类似,但是远比后者简单,能够对预定义的标识符
(称为conversion specifiers)进行解析,转换成特定格式输出。以下代码
片段演示了如何使用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
"
)
输出结果:
10
/
16
/
04
18
:
51
:
25
-
teststr [main.cpp:
51
]
可以看出通过填写特定格式的模式字符串"pattern",原始信息被包含到一堆有格式的信息当中了,
这就使得用户可以根据自身需要来定制显示内容。"pattern"可以包含普通字符串和预定义的标识符,
其中:(
1)普通字符串,能够被直接显示的信息。
2)预定义标识符,通过"%"与一个或多个字符共同构成预定义的标识符,能够产生出特定格式信息。
关于预定义标识符,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呢,呵呵)。
四. TTCCLayout
是在PatternLayout基础上发展的一种缺省的带格式输出的布局器, 其格式由时间,线程ID,Logger和NDC 组成
。提供给那些想显示典型的信息(一般情况下够用了)又懒得配置pattern的同志们。
TTCCLayout在构造时有机会选择显示本地时间或GMT时间,缺省是按照本地时间显示:
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
"
)
输出结果:
10
-
16
-
04
19
:
08
:
27
,
501
[
1075298944
] DEBUG test_logger
<>
-
teststr
当构造TTCCLayout对象时选择GMT时间格式时:
//
step 2: Instantiate a layout object
std::auto_ptr _layout(
new
TTCCLayout(
true
));
输出结果:
10
-
16
-
04
11
:
12
:
47
,
678
[
1075298944
] DEBUG test_logger
<>
-
teststr
*/
posted on 2011-04-02 15:43
C++技术中心
阅读(3562)
评论(0)
编辑
收藏
引用
所属分类:
三方库
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
memcached安装
log4cplus库(四)(优先级与日志配置)
log4cplus库(三)(将日志写入到文件)
log4cplus库(二)(通过布局器Layouts)
log4cplus库(一)(简单使用)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Copyright @ C++技术中心
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster