Hello
I have a problem with asyncappender and wrote a mail to log4cxx user
mailinglist:
http://marc.theaimsgroup.com/?l=log4cxx-user&m=115701692131918&w=2
But now I don't think this is a configuration problem. I think it is a
bug in the domconfigurator. For testing I added the param apr_xml_doc*
doc to findAppenderByName().
So now this method is possible to call parseAppender() with doc as
second parameter and not 0. I did this because parseAppender wasn't able
to find the appender which should be added to the asyncappender and now
with the doc pointer it is able to find the appender. This works for me
fine and also the configuration like shown in my mail in the user - list
works.
For the case that this is a good solution I will add diff for
domconfigurator.h and .cpp. But I only have tested this for the one
case, described in me mail in log4cxx user list. I don't know the
possible effects for other situations.
Greetings
Christian
Index: domconfigurator.h
===================================================================
--- domconfigurator.h (revision 438834)
+++ domconfigurator.h (working copy)
@@ -95,7 +95,8 @@
*/
AppenderPtr findAppenderByName(apr_xml_elem*
elem,
const LogString& appenderName,
- AppenderMap& appenders);
+ AppenderMap& appenders,
+ apr_xml_doc* doc);
/**
Used internally to parse appenders by IDREF
element.
Index: domconfigurator.cpp
===================================================================
--- domconfigurator.cpp (revision 438834)
+++ domconfigurator.cpp (working copy)
@@ -112,19 +112,20 @@
*/
AppenderPtr DOMConfigurator::findAppenderByName(apr_xml_elem* element,
const LogString&
appenderName,
- AppenderMap& appenders)
{
+ AppenderMap& appenders,
+ apr_xml_doc* doc) {
AppenderPtr appender;
std::string tagName(element->name);
if (tagName == APPENDER_TAG) {
if (appenderName == getAttribute(element, NAME_ATTR)) {
- appender = parseAppender(element, 0, appenders);
+ appender = parseAppender(element, doc, appenders);
}
}
if (element->first_child && !appender) {
- appender = findAppenderByName(element->first_child,
appenderName, appenders);
+ appender = findAppenderByName(element->first_child,
appenderName, appenders, doc);
}
if (element->next && !appender) {
- appender = findAppenderByName(element->next, appenderName,
appenders);
+ appender = findAppenderByName(element->next, appenderName,
appenders, doc);
}
return appender;
}
@@ -142,7 +143,7 @@
if (match != appenders.end()) {
appender = match->second;
} else if (doc) {
- appender = findAppenderByName(doc->root, appenderName,
appenders);
+ appender = findAppenderByName(doc->root, appenderName,
appenders, doc);
if (appender) {
appenders.insert(AppenderMap::value_type(appenderName,
appender));
}