gpt4 book ai didi

logging - cxf 入站和出站消息记录到单独的日志文件

转载 作者:行者123 更新时间:2023-12-04 17:11:55 25 4
gpt4 key购买 nike

我查找了所有消息,但没有找到该问题的明确答案。

如何配置日志记录以记录 CXF 入站和出站 Restful 消息?

我有以下设置。

  • 文件 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 来遵循这些说明,但我得到的文件的唯一输出是应用程序日志消息。我可以在控制台上看到入站和出站消息。

    我可以得到类似于 logback.xml 的东西对我有用吗,所以我将应用程序日志和消息日志分开。示例: http://www.wolfe.id.au/2011/05/20/apache-cxf-logging/

    谢谢。

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

    最佳答案

    假设您使用的是 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属性(property)到 true并将其添加到 CXF 总线。

    步骤 3) 添加 log4j 和 slf4j-log4j12 所需的 jar 文件。如果您使用的是 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,设置 additivityFALSE并附上一个专用的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 .

    关于logging - cxf 入站和出站消息记录到单独的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424058/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com