java - CXF 3.1 wsdl2java 使用 Log4j2 进行日志记录

标签 java cxf log4j2

我已经使用 CXF 3.1 wsdl2java 生成了我的服务,所以没有 cxf.xml。

我正在尝试将服务的请求和响应 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>

没有显示附加程序,但它们在那里,APP_LOG_FILE 已填充但 WS_LOG_FILE 附加程序文件始终为空,同时交换消息。

我添加了一个包含此内容的 META-INF/cxf/org.apache.cxf.Logger 文件

org.apache.cxf.common.logging.Slf4jLogger

我还尝试在运行我的 jar 时使用额外的命令行参数来替代 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 文档非常简洁。

最佳答案

作为答案的要求:对于 CXF < 3.1,建议按照您在最后一个代码片段中显示的方式设置 LoggingInterceptors。您应该像这样使用 @Feature-Annotation:@Features(features = "org.apache.cxf.feature.LoggingFeature")

关于java - CXF 3.1 wsdl2java 使用 Log4j2 进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328052/

相关文章:

java - 如何为SpringTemplateEngine注册转换服务?

java - 从 TreeMap 克隆对象中删除元素不会从 java 中的主树形图对象中删除

maven - 为什么 Maven 下载 log4j-1.2.12.jar?

android - 如何使用 CXF REST 客户端传递用户定义的对象?

java - 带有第 3 方附加程序的 log4j2

java - 如何在不使用Maven的情况下在JavaFx项目中部署log4j version2

java - 我们可以在 Java 中使用原子枚举吗?

java - Eclipse 和 BIRT 错误 - 在 Web 查看器中查看报告

java - 使用 Spring 和 Apache CXF 实现 Java Web 服务的安全性

java - CXF wsdl2java 导致 BINDING_MISSING_TYPE