Как сделать запрос CXF SOAP для печати в файле журнала

@InInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingInInterceptor"  )
@OutInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingOutInterceptor")

public class SKTWeb implements SKTWebService {

// method logic goes here 

}

Привет, после добавления этих двух строк в реализацию метода CXF. Я мог бы получить запрос и ответ SOAP под консолью сервера tomcat

см. экземпляр запроса SOAP, напечатанного в консоли Tomcat

INFO: Inbound Message
----------------------------
ID: 1
Address: /Sktweb-33.0/services/SKTWeb
Encoding: UTF-8
Content-Type: text/xml; charset=UTF-8
Headers: {cache-control=[no-cache], content-type=[text/xml; charset=UTF-8], connection=[keep-alive], host=[local
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns4:strategy xmlns:ns

Может кто-нибудь, пожалуйста, скажите мне, как получить это в моем файле журнала (Log4j)

В настоящее время это мой файл log4j.properties.

log4j.rootCategory=INFO, A1

# A1 is a DailyRollingFileAppender

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=/Haieeee.log
log4j.appender.A1.datePattern='.'yyyy-MM-dd
log4j.appender.A1.append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-22d{dd/MMM/yyyy HH:mm:ss} - %m%n

А также у меня есть META-INF\cxf\org\apache\cxf\Logger Log4jLogger.class внутри веб-приложения. А еще я сохранил

<cxf:bus>
<cxf:features>
<cxf:logging/>
</cxf:features>
</cxf:bus> 

Внутри файла endpoints.xml

Любая помощь, пожалуйста


cxf
person Pawan    schedule 10.11.2011    source источник


Ответы (3)


Кажется, небольшая путаница. Вам нужно, чтобы ваше собранное приложение имело доступный файл META-INF/cxf/org.apache.cxf.Logger (да, это точки! Это не файл .java или .class), и оно должно иметь содержимое:

org.apache.cxf.common.logging.Log4jLogger

Я использую именно это в своем коде, и это работает как шарм. (Однако я не использую его с функцией регистрации сообщений; на мой вкус, слишком много трафика при развертывании…)

person Donal Fellows    schedule 21.11.2011

По сути, вы хотите, чтобы ваш файл свойств был выбран CXF, а затем он использовал этот файл свойств вместо CXF. Я использую конфигурацию spring в своем приложении CXF. Если вы не используете какую-либо конфигурацию Spring, вы создаете новую конфигурацию и загружаете ее при запуске с помощью прослушивателя контекста Spring, после чего вы можете добавить приведенный ниже код в свой XML-файл.

<bean id="log4jInitialization"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
        <property name="targetMethod" value="initLogging" />
        <property name="arguments">
            <list>
                <value>file:fullpath/filename.properties</value>
            </list>
        </property>
    </bean>

Вы также можете иметь classpath:filename.properties в <list> </list>. Ведение журнала, реализованное в среде Spring, будет использоваться для регистрации всех запросов и ответов. Вы также можете использовать ту же реализацию ведения журнала, что и в своем приложении.

person Ganesh    schedule 21.11.2011

Всегда используйте перехватчики... Добавьте slf4j-log4j12-1.6.1.jar, slf4j-api-1.6.1.jar и commons-logging-1.1.1.jar. Вставьте следующий код в файл cxf.xml...

<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" id="loggingInInterceptor" />
    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" id="logOutInterceptor" />
    <cxf:bus>
        <cxf:inInterceptors>
            <ref bean="loggingInInterceptor" />
        </cxf:inInterceptors>
        <cxf:outInterceptors>
            <ref bean="logOutInterceptor" />
        </cxf:outInterceptors>
    </cxf:bus>
person Community    schedule 23.01.2013