源代码续
void
log4cplus
::
PropertyConfigurator
::
configureAppenders
()
{
Properties
appenderProperties
=
properties
.
getPropertySubset
(
LOG4CPLUS_TEXT
(
"appender."
));
//
根据
Appenders
文本获取相关的数据
vector
<
tstring
>
appendersProps
=
appenderProperties
.
propertyNames
();
for
(
vector
<
tstring
>::
iterator
it
=
appendersProps
.
begin
();
it
!=
appendersProps
.
end
();
++
it
)
{
if
( (*
it
).
find
(
LOG4CPLUS_TEXT
(
'.'
) ) ==
tstring
::
npos
) {
//
实现基本的数据采集获取功能
tstring
factoryName
=
appenderProperties
.
getProperty
(*
it
);
//
解析获得创建实例所需使用的有关
Factory
的方法
AppenderFactory
*
factory
=
getAppenderFactoryRegistry
().
get
(
factoryName
);
//
通过工厂名称来获得相关的工厂方法
if
(
factory
== 0) {
tstring
err
=
LOG4CPLUS_TEXT
(
"PropertyConfigurator::configureAppenders()- Cannot find AppenderFactory: "
);
getLogLog
().
error
(
err
+
factoryName
);
continue
;
}
Properties
properties
=
appenderProperties
.
getPropertySubset
((*
it
) +
LOG4CPLUS_TEXT
(
"."
));
try
{
//
创建相关的对象链接
SharedAppenderPtr
appender
=
factory
->
createObject
(
properties
);
if
(
appender
.
get
() == 0) {
tstring
err
=
LOG4CPLUS_TEXT
(
"PropertyConfigurator::configureAppenders()- Failed to create appender: "
);
getLogLog
().
error
(
err
+ *
it
);
}
//
实现对属性值的处理
else
{
appender
->
setName
(*
it
);
appenders
[*
it
] =
appender
;
}
}
catch
(
std
::
exception
&
e
) {
tstring
err
=
LOG4CPLUS_TEXT
(
"PropertyConfigurator::configureAppenders()- Error while creating Appender: "
);
getLogLog
().
error
(
err
+
LOG4CPLUS_C_STR_TO_TSTRING
(
e
.
what
()));
}
}
}
// end for loop
}
void
log4cplus
::
PropertyConfigurator
::
configureAdditivity
()
{
Properties
additivityProperties
=
properties
.
getPropertySubset
(
LOG4CPLUS_TEXT
(
"additivity."
));
vector
<
tstring
>
additivitysProps
=
additivityProperties
.
propertyNames
();
for
(
vector
<
tstring
>::
iterator
it
=
additivitysProps
.
begin
();
it
!=
additivitysProps
.
end
();
++
it
)
{
Logger
logger
=
getLogger
(*
it
);
tstring
actualValue
=
additivityProperties
.
getProperty
(*
it
);
tstring
value
=
toLower
(
actualValue
);
if
(
value
==
LOG4CPLUS_TEXT
(
"true"
)) {
logger
.
setAdditivity
(
true
);
}
else
if
(
value
==
LOG4CPLUS_TEXT
(
"false"
)) {
logger
.
setAdditivity
(
false
);
}
else
{
getLogLog
().
warn
(
LOG4CPLUS_TEXT
(
"Invalid Additivity value: ""
)
+
actualValue
+
LOG4CPLUS_TEXT
(
"""
));
}
}
}
分享到:
相关推荐
打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 <br>主要思路是: <br>提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...
构建项目时,MOC工具读取C++源文件,当它发现类的定义里有Q_OBJECT宏时,它就会为这个类生成另外一个包含有元对象支持代码的C++源文件,这个生成的源文件连同类的实现文件一起被编译和连接。 除了信号和槽机制外,...
由WebCrawler对象在从MultiIo对象中等到套接字描述符可读时动态创建,通 过Socket对象接收超文本传输协议响应。WEBCRAWLER 网络爬虫实训项目 9 2.3.4. 网络爬虫(WebCrawler) 代表整个应用程序的逻辑对象,构建并维护...
实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...
cc实例214 动态创建视图 cc实例215 通过视图更改数据 cc实例216 删除视图 8.6 触发器 cc实例217 创建触发器 cc实例218 在程序中使用触发器 8.7 存储过程 cc实例219 创建存储...
实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...
实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...
8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...
cc实例214 动态创建视图 cc实例215 通过视图更改数据 cc实例216 删除视图 8.6 触发器 cc实例217 创建触发器 cc实例218 在程序中使用触发器 8.7 存储过程 cc实例219 创建存储...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...
打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 <br>主要思路是: <br>提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...
6.3.3 C++的动态内存管理 139 6.4 标准文件I/O 141 6.4.1 标准流 141 6.4.2 使用流I/O 141 6.4.3 打开流 142 6.4.4 写入流 143 6.4.5 流的读取 145 6.4.6 搜索位置 148 6.4.7 错误检查 149 6.4.8 关闭流 ...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...