在我们的 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
;根据组织团队的推荐。
在重新排序异常映射器并使用 log.error 显式记录错误后,此问题已得到解决。 log4j配置没有问题。