2012-02-24 5 views
5

Я просмотрел все сообщения, но не нашел четкого ответа на этот вопрос.Входящие и исходящие сообщения cxf в отдельный файл журнала

Как настроить ведение журнала для регистрации входящих и исходящих сообщений CXF?

У меня есть следующая настройка.

  • Файл org.apache.cxf.Logger с

    org.apache.cxf.common.logging.Log4jLogger 
    
  • applicationContext.xml имеет следующее (это звучит глупо, но это единственное место для перехватчиков я мог бы получить вывод сообщений)

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

Я пытался следовать этим инструкциям с SLF4J и с log4j, но единственный выход I получить в файл сообщения журнала приложения. Я вижу входящие и исходящие сообщения на моей консоли.

Могу ли я получить что-то подобное работе logback.xml для меня, поэтому я разделяю журналы приложений и журналы сообщений. Пример: http://www.wolfe.id.au/2011/05/20/apache-cxf-logging/

Спасибо.

EDIT 1: я удалил org.apache.cxf.common.logging.Log4jLogger из моего пути к классам, и поместил следующее моей log4j.xml. Он регистрируется в файле и настраивается, когда уровень ведения журнала равен 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> 

ответ

9

Предполагая, что вы используете CXF 2.2.8 или выше, вам нужно будет сделать следующее:

шаг 1) Создайте файл META-INF/cxf/org.apache.cxf.Logger на пути к классам, содержащий следующее:

org.apache.cxf.common.logging.Slf4jLogger 

Если вы используете Maven, этот новый файл должен быть в src/main/resources/META-INF/cxf, а не ниже src/main/webapp!

шаг 2) Если вы хотите, чтобы регистрировать все сообщения, создать CXF LoggingFeature, установите prettyLogging свойство true и добавить его к шине CXF.

этап 3) Добавьте необходимые файлы jar для log4j и slf4j-log4j12. Если вы используете Maven, включают в себя следующие зависимости:

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

шаг 4) В вы log4j.xml установить уровень регистрации org.apache.cxf.services к INFO, установите additivity в FALSE и прикрепить специальный Appender:

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

Я создал blog post which explains how to configure CXF for log4j in more detail.

+2

Все в порядке, всего лишь небольшая заметка: Не забудьте поставить «META-INF/cxf/org.apache.cxf.Logger» под, например, src/main/resources вместо «src/main/webapp», как и я. Таким образом, это будет под classpath. –

Смежные вопросы