Múltiples log4cxx Dom Configurator en un solo proceso

Tengo 2 componentes com diferentes que se instancian en el mismo proceso. Ambos componentes utilizan Log4cxx DomConfigurator y configuran diferentes archivos xml de configuración de log4cxx. Cada uno especifica diferentes rutas para los registros. Pero los registros se crean en la ruta especificada por el componente com que se instancia como último.

Quiero que estos 2 registros de componentes COM estén en un archivo separado. ¿Cómo lograr esto?

preguntado el 03 de mayo de 12 a las 08:05

3 Respuestas

Si está utilizando el mismo proceso o subproceso, logcxx intente sobrescribir el anterior. Entonces, mejor inicie otro hilo y asigne logcxx para realizar el próximo registro. Entonces todo estará bien.

contestado el 03 de mayo de 12 a las 08:05

Tengo 2 componentes diferentes que se ejecutarán en el mismo proceso. Los 2 procesos son diferentes. Ambos pueden o no ejecutarse al mismo tiempo. En pocas ocasiones, ambos pueden correr o pocas veces cualquiera estará corriendo, ¿ambos no sabrán si otro está corriendo o no? Si ambos no se ejecutan al mismo tiempo, no hay problema. Cuando ambos componentes se ejecutan, los registros se dirigen al último. ¿Cómo manejarlo? - Rajesh Subramanian

Como dijiste, estás usando dos componentes que son independientes. Entonces puede iniciar su logcxx por separado sin ningún problema. Lo único que tiene que cambiar es su archivo de configuración xml. Simplemente especifique su ruta de registro. Aquí el proceso o el hilo no lo hacen. importar. por favor revise mi respuesta a continuación. - Srijeyanthan

El componente 1 tiene este código o puede escribir en una clase común de contenedor logcxx que cualquier componente puede usar.

strPath = "AppLog1.dat";
log4cxx::BasicConfigurator::configure();
log4cxx::File cfgFile(strPath);
log4cxx::PropertyConfigurator::configureAndWatch(cfgFile, 60000);

Componente 2 que tiene el mismo código con un archivo AppLog2.dat diferente

archivo de datos de muestra.

#Log4cxx configuration file . 
#Final version of log4cxx config 
#Author - Sri  4/5/2012

# Root logger set to DEBUG using the A2 apender defined above. 
# Set options for appender named 'DT' 
# DT's layout is TTCC, using the 
# ISO8061 date format with context printing enabled. 

log4j.appender.DT=RollingFileAppender 
log4j.appender.DT.layout=TTCCLayout
log4j.appender.DT.File=.\\log\\log.log
log4j.appender.DT.layout.ContextPrinting=enabled
log4j.appender.DT.layout.DateFormat=ISO8601
log4j.appender.DT.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.DT.rollingPolicy.FileNamePattern=.\\log\\log-%d.log.zip




# Set options for appender named 'RawAppender' 
# RawAppender's layout is PatternLayout

log4j.appender.RawAppender=RollingFileAppender 
log4j.appender.RawAppender.layout=TTCCLayout
log4j.appender.RawAppender.File=.\\log\\Raw.log
log4j.appender.RawAppender.layout.ContextPrinting=enabled
log4j.appender.RawAppender.layout.DateFormat=ISO8601
log4j.appender.RawAppender.rollingPolicy=org.apache.log4j.rolling.
TimeBasedRollingPolicy
log4j.appender.RawAppender.rollingPolicy.FileNamePattern=.\\log\\RawData-%d.log.zip


# Set options for appender named 'ErrorAppender' 
# ErrorAppender's layout is TTCC, using the 
# ISO8061 date format with context printing enabled. 

log4j.appender.ErrorAppender=RollingFileAppender 
log4j.appender.ErrorAppender.MaxBackupIndex=10 
log4j.appender.ErrorAppender.layout=TTCCLayout
log4j.appender.ErrorAppender.File=.\\log\\Error.log
log4j.appender.ErrorAppender.layout.ContextPrinting=enabled
log4j.appender.ErrorAppender.layout.DateFormat=ISO8601
log4j.appender.ErrorAppender.rollingPolicy=org.apache.log4j.rolling.
TimeBasedRollingPolicy
log4j.appender.ErrorAppender.rollingPolicy.FileNamePattern=.\\log\\Error-%d.log.zip


# Root logger set to DEBUG using the A2 apender defined above. 

log4j.rootLogger=DEBUG, DT


# The logger 'DTError' inherits its level from the 
# logger hierarchy. Output will go to the appender's of the root 
# logger, DT in this case. 

log4j.logger.DTError=INHERIT,ErrorAppender

/////////////////////////////////////////////////// ////////////////////// Cuando componga el archivo de configuración de su segundo componente, simplemente cambie la ruta de registro o el nombre del archivo.

aplausos.

contestado el 04 de mayo de 12 a las 08:05

Me doy cuenta de que este hilo tiene un par de años ... pero no siento que haya sido respondido.

Su pregunta era cómo generar el registro en diferentes archivos por componente. El título de esta pregunta 'Configuradores DOM múltiples en un solo proceso'... no es la respuesta correcta a lo que está tratando de hacer.

Si está utilizando una configuración DOM, puede definir fácilmente varios Appenders que escribirán en diferentes archivos.

<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>

Luego defina un registrador por componente que usará el Appender apropiado.

<logger name="componentA">
    <priority value="all"/>
    <appender-ref ref="LogFileA"/>
</logger>

<logger name="componentB">
    <priority value="all"/>
    <appender-ref ref="LogFileB"/>
</logger>

Configure y recupere un puntero al registrador adecuado:

log4cxx::xml::DOMConfigurator::configure("xml_config_file");
log4cxx::LoggerPtr componentA = log4cxx::Logger::getLogger("componentA");
log4cxx::LoggerPtr componentB = log4cxx::Logger::getLogger("componentB");

Si bien dudo que esta respuesta lo ayude... Espero que ayude a alguien más con una pregunta similar.

Respondido 23 Oct 14, 13:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.