I realize that this thread is a couple of years old... but don't feel that it was answered.
Your question was how to output logging to different files per component. The title of this question 'Multiple DOM configurators in a single process'... isn't the right answer to what you're trying to do.
If you're using a DOM configuration, you can easily define multiple Appenders that will write to different files.
<appender name="LogFileA" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logA.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
<appender name="LogFileB" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logB.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
Then define a logger per component that will use the appropriate Appender.
<logger name="componentA">
<priority value="all"/>
<appender-ref ref="LogFileA"/>
</logger>
<logger name="componentB">
<priority value="all"/>
<appender-ref ref="LogFileB"/>
</logger>
Configure and retrieve a pointer to the appropriate logger:
log4cxx::xml::DOMConfigurator::configure("xml_config_file");
log4cxx::LoggerPtr componentA = log4cxx::Logger::getLogger("componentA");
log4cxx::LoggerPtr componentB = log4cxx::Logger::getLogger("componentB");
While I doubt this answer will help you... I hope that it will help someone else with a similar question.