void
log4cplus
::
PropertyConfigurator
::
configureAppenders
()
{
???
Properties
?
appenderProperties
=
????????
properties
.
getPropertySubset
(
LOG4CPLUS_TEXT
(
"appender."
));
??? //
根據(jù)
Appenders
文本獲取相關(guān)的數(shù)據(jù)
???
vector
<
tstring
>
appendersProps
=
appenderProperties
.
propertyNames
();
???
for
(
vector
<
tstring
>::
iterator
?
it
=
appendersProps
.
begin
();
???????
it
!=
appendersProps
.
end
();
??????? ++
it
)
??? {
???????
if
( (*
it
).
find
(
LOG4CPLUS_TEXT
(
'.'
) ) ==
tstring
::
npos
) {
????
????????
????//
實現(xiàn)基本的數(shù)據(jù)采集獲取功能
tstring
?
factoryName
=
appenderProperties
.
getProperty
(*
it
);
//
解析獲得創(chuàng)建實例所需使用的有關(guān)
Factory
的方法
AppenderFactory
*
factory
=
getAppenderFactoryRegistry
().
get
(
factoryName
);
//
通過工廠名稱來獲得相關(guān)的工廠方法
???????????
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
{
?
?????????? //
創(chuàng)建相關(guān)的對象鏈接
???????????????
SharedAppenderPtr
?
appender
=
factory
->
createObject
(
properties
);
???????????????
if
(
appender
.
get
() == 0) {
???????????????????
tstring
?
err
=
???????????????????????
LOG4CPLUS_TEXT
(
"PropertyConfigurator::configureAppenders()- Failed to create appender: "
);
???????????????????
getLogLog
().
error
(
err
+ *
it
);
?
??????????????}
//
實現(xiàn)對屬性值的處理
???????????????
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
(
"\""
));
??????? }
??? }
}