2016-05-19 2 views
3

Я сгенерировал свою службу, используя CXF 3.1 wsdl2java, поэтому нет cxf.xml.CXF 3.1 wsdl2java logging with Log4j2

Я пытаюсь добавить XML-запрос и ответ для службы в мою установку log4j2. Существует много противоречивой информации из-за изменений в версии и т. Д. Мой файл журнала запроса/ответа xml CXF всегда пуст.

Это было ближе всего к моей установке: How to log CXF webservice requests with log4j2?

Так что я следующий в моем log4j2.xml

<logger name="org.apache.cxf" additivity="false" level="info"> 
      <AppenderRef ref="APP_LOG_FILE"/> 
    </logger> 
    <logger name="org.apache.cxf.interceptor.LoggingInInterceptor" additivity="false" level="info"> 
     <AppenderRef ref="WS_LOG_FILE" /> 
    </logger> 
    <logger name="org.apache.cxf.interceptor.LoggingOutInterceptor" additivity="false" level="info"> 
     <AppenderRef ref="WS_LOG_FILE" /> 
    </logger> 

Не показывая appenders, но они там, APP_LOG_FILE заселена, но Файлы-приложения WS_LOG_FILE всегда пусты, а обмен сообщениями.

Я добавил META-INF/CXF/org.apache.cxf.Logger файл с этим содержанием

org.apache.cxf.common.logging.Slf4jLogger 

Я также попытался с помощью дополнительного параметра командной строки при запуске моей банки в качестве альтернативы CXF .Logger файл:

-Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Slf4jLogger 

Я добавил дополнительную зависимость:

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-slf4j-impl</artifactId> 
    <version>2.0</version> 
</dependency> 

Я попытался п (как они нужны или альтернативы конфигурации в log4j2.xml?) и без них, как показано в настоящее время в комментариях.

GetComparisonDecisionService equinitiComparisonService = new GetComparisonDecisionService(); 
    GetComparisonDecisionInterface comparison = equinitiComparisonService.getGetComparisonDecision(); 
/* 
    Client client = ClientProxy.getClient(equinitiComparisonService.getPort(GetComparisonDecisionInterface.class)); 
    client.getInInterceptors().add(new LoggingInInterceptor()); 
    client.getOutInterceptors().add(new LoggingOutInterceptor()); 
*/ 
    GetComparisonDecisionCallParameter comparisonDecisionCallParameter = new GetComparisonDecisionCallParameter(); 
    comparisonDecisionCallParameter.setSecurityToken(token); 
    comparisonDecisionCallParameter.setComparisonApplication(equinitiApp); 

    GetComparisonDecisionResponseParameter eqDescn = comparison.getComparisonDecision(comparisonDecisionCallParameter); 

У меня закончились идеи на этом этапе. Документация cxf очень краткая.

+0

Настройка параметров LoggingInterceptors, как показано в последнем фрагменте кода, рекомендуется для CXF <3.1. Вы должны использовать '@ Feature'-Annotation следующим образом:' @Features (features = "org.apache.cxf.feature.LoggingFeature") '. – Frank

+0

Это сработало. Но интересно, что с помощью wdsl2java вы создаете класс, который затем нуждается в ручном редактировании, чтобы добавить аннотацию @Features, необходимую для регистрации. Частично побеждает цель генерации кода клиента SOAP. Жаль, что я не могу отметить комментарий в качестве правильного ответа ... – csDave

ответ

1

В качестве ответа в качестве ответа: Установка LoggingInterceptors для CXF рекомендуется использовать способ, который вы показываете в последнем фрагменте кода. < 3.1. Вы должны использовать @ Feature-Annotation следующим образом: @Features(features = "org.apache.cxf.feature.LoggingFeature").

0

См. Комментарий Фрэнк, он исправил проблему.

Отмечу, что очевидное место для поиска информации о регистрации на сайте CXF - http://cxf.apache.org/docs/debugging-and-logging.html не упоминает этот метод !?

+0

Если ответ Фрэнка зафиксировал проблему, я предлагаю отметить ее как ответ (и, возможно, увеличить), чтобы он получил очки репутации. –