2012-02-24 17 views
5

He buscado todos los mensajes pero no encontré una respuesta clara para esa pregunta.cxf registro de mensajes entrantes y salientes en el archivo de registro separado

¿Cómo puedo configurar el registro para registrar los mensajes de recuperación entrantes y salientes de CXF?

Tengo la siguiente configuración.

  • org.apache.cxf.Logger de archivos con

    org.apache.cxf.common.logging.Log4jLogger 
    
  • applicationContext.xml tiene la siguiente (que suena tonto, pero es el único lugar para los interceptores que pude conseguir de salida mensajes)

    <bean id="abstractLoggingInterceptor" abstract="true"> 
    <property name="prettyLogging" value="true"/> 
    </bean> 
    <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" 
    parent="abstractLoggingInterceptor"/> 
    <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" 
    parent="abstractLoggingInterceptor"/> 
    
    <cxf:bus> 
    <cxf:inInterceptors> 
    <ref bean="loggingInInterceptor"/> 
    </cxf:inInterceptors> 
    <cxf:outInterceptors> 
    <ref bean="loggingOutInterceptor"/> 
    </cxf:outInterceptors> 
    <cxf:outFaultInterceptors> 
    <ref bean="loggingOutInterceptor"/> 
    </cxf:outFaultInterceptors> 
    <cxf:inFaultInterceptors> 
    <ref bean="loggingInInterceptor"/> 
    </cxf:inFaultInterceptors> 
    </cxf:bus> 
    

traté de seguir estas instrucciones con slf4j y con log4j, pero la única salida de la I llegar al archivo es mensajes de registro de la aplicación. Puedo ver mensajes entrantes y salientes en mi consola.

¿Puedo obtener algo similar para que logback.xml funcione para mí, por lo que se separan los registros de la aplicación y los registros de mensajes. Ejemplo: http://www.wolfe.id.au/2011/05/20/apache-cxf-logging/

Gracias.

EDIT 1: me quita org.apache.cxf.common.logging.Log4jLogger de mi ruta de clases, y se coloca el siguiente a mi log4j.xml. Se registra en el archivo y en la consola cuando el nivel de registro es INFO.

<appender name="RSLOGFILE" class="org.apache.log4j.RollingFileAppender"> 
<param name="file" value="${project.basedir}/logs/cxf_inout_messages.log"/> 
<param name="MaxFileSize" value="100KB"/> 
<!-- Keep one backup file --> 
<param name="MaxBackupIndex" value="1"/> 
<layout class="org.apache.log4j.PatternLayout"> 
<!-- Print the date in ISO 8601 format --> 
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
</layout> 
</appender> 
<logger name="org.apache.cxf"> 
<level value="ERROR"/> 
<appender-ref ref="RSLOGFILE"/> 
</logger> 

Respuesta

9

Suponiendo que está usando CXF 2.2.8 o superior, lo que tendría que hacer lo siguiente:

paso 1) Crear un archivo META-INF/cxf/org.apache.cxf.Logger en la ruta de clase que contiene lo siguiente:

org.apache.cxf.common.logging.Slf4jLogger 

Si está utilizando Maven, este nuevo archivo debe estar en src/main/resources/META-INF/cxf, no debajo de src/main/webapp!

paso 2) Si desea registrar todos los mensajes, crear un CXF LoggingFeature, establezca la propiedad prettyLogging a true y agregarlo al bus CXF.

paso 3) Agregue los archivos jar necesarios para log4j y slf4j-log4j12. Si está utilizando Maven, incluirá siguientes dependencias:

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 

paso 4) En que log4j.xml establecer el nivel de registro de org.apache.cxf.services a INFO, configurar additivity-FALSE e incluir una appender dedicado:

<!-- level INFO needed to log SOAP messages --> 
<logger name="org.apache.cxf.services" additivity="false"> 
    <level value="INFO" /> 
    <!-- specify a dedicated appender for the SOAP messages --> 
    <appender-ref ref="WS_LOG_FILE" /> 
</logger> 

he creado un blog post which explains how to configure CXF for log4j in more detail.

+2

Aquí todo está bien, sólo una pequeña nota: recuerda poner "META-INF/cxf/org.apache.cxf.Logger" bajo por ejemplo src/main/resources en lugar de "src/main/webapp" como lo hice. De esa forma estará bajo classpath. –

Cuestiones relacionadas