错误日志记录问题:使用带有 log4j2 的 cxf-jaxrs 的 java Restful 应用程序在迁移 cxf 后未将错误和异常堆栈跟踪打印到文件

问题描述 投票:0回答:1

在我们的 Spring Java 应用程序中尝试升级 cxf 和 log4j2 版本后; cxf 从 2 -> 3.1 & log4j 1.x -> 2.x;日志记录已损坏。滚动文件附加程序和 smtp 附加程序不再记录异常。在 maven-jetty 插件中运行应用程序时,异常被打印到控制台。所有其他记录器都可以很好地打印,但例外情况则不然。无法弄清楚出了什么问题。

applicationcontext.xml


<bean id="logInbound" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="logOutbound" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>

<jaxrs:server id="serviceResource" address="/rest">
    <jaxrs:serviceBeans>
        <ref bean="endpoint1"/>
        <ref bean="endpoint2"/>            
    </jaxrs:serviceBeans>

    <!-- this is removed after migrating to new cxf 3 infavor of exception mappers
    <jaxrs:outFaultInterceptors>
        <ref bean="cxfRestFaultInterceptor"/>
    </jaxrs:outFaultInterceptors>
    -->
    
    <jaxrs:inInterceptors>
        <ref bean="logInbound"/>
    </jaxrs:inInterceptors>
    <jaxrs:outInterceptors>
        <ref bean="logOutbound"/>
    </jaxrs:outInterceptors>
    <jaxrs:providers>
        <bean id="businessExceptionMapper"
              class="com.commons.interceptors.BusinessExceptionMapper">
            <property name="exceptionMessageSource" ref="exceptionMessageSource"/>
            <property name="exceptionCodeSource" ref="exceptionCodeSource"/>
        </bean>
        <bean id="globalExceptionMapper"
              class="com.common.interceptors.GlobalExceptionMapper">
            <property name="messageSource" ref="messageSource"/>
        </bean>
        <bean id="applicationExceptionMapper"
              class="com.common.interceptors.ApplicationExceptionMapper">
            <property name="messageSource" ref="messageSource"/>
        </bean>
        <ref bean='jacksonProvider'/>
    </jaxrs:providers>
</jaxrs:server>

log4j2.xml

<Configuration>

    <Appenders>
        <RollingFile
                name="fileout"
                fileName="../logs/web.log"
                filePattern="../logs/web.%i.log"
                ignoreExceptions="false"
                append="true">
            <PatternLayout>
                <Pattern>[%d{DATE}] - %X{hostName} - [%-5p][%c{1},%t] - %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>

        <SMTP
                name="mail"
                from="from_email"
                to="to_email"
                subject="APIWebError"
                smtpHost="smtp_host">
            <HtmlLayout/>

        </SMTP>        
    </Appenders>

    <Loggers>        
        <Root level="error">
            <AppenderRef ref="fileout"/>
            <AppenderRef ref="mail"/>
        </Root>
    </Loggers>

</Configuration>

注意:

outFaultInterceptors
之前使用过,但将其删除并在提供程序部分使用
exceptionmapper
;根据组织团队的推荐。

java spring jax-rs cxf log4j2
1个回答
0
投票

在重新排序异常映射器并使用 log.error 显式记录错误后,此问题已得到解决。 log4j配置没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.