<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<map>
<entry key="java.lang.Exception" value="error"/>
</map>
</property>
<property name="warnLogCategory" value="abcdefg"/>
</bean>
I would like to log the exception above into a .log file, but it does not log =(. Could someone comment on what might be wrong with my log4j properties...or anything else?
Using Spring 3.0.5
thanks
log4j.rootLogger=DEBUG, stdout, pqe
log4j.category.abcdefg=WARN, pqe
log4j.appender.pqe=org.apache.log4j.DailyRollingFileAppender
log4j.appender.pqe.DatePattern=_yyyyMMdd
log4j.appender.pqe.File=D:\\pqe.log
log4j.appender.pqe.layout=org.apache.log4j.PatternLayout
log4j.appender.pqe.layout.ConversionPattern=%d|%5p|%c %m%n
my solution is override method logException in SimpleMappingExceptionResolver
new resolver:
public class LoggingExceptionResolver extends SimpleMappingExceptionResolver {
private Logger logger = LoggerFactory.getLogger(LoggingExceptionResolver.class);
@Override
protected void logException(Exception ex, HttpServletRequest request) {
this.logger.warn(buildLogMessage(ex, request), ex);
}
}
spring config:
<bean id="exceptionResolver" class="com.zyam.isu.core.utils.log.LoggingExceptionResolver">
<property name="defaultErrorView">
<value>error.jsp</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.lang.RuntimeException">error.jsp</prop>
<prop key="java.lang.Exception">error.jsp</prop>
</props>
</property>
</bean>
logback.xml
<logger name="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<level value="warn" />
</logger>
I think logback config is similar with log4j, hope could help you
Try to extend it with something like:
public class LoggingExceptionResolver extends SimpleMappingExceptionResolver {
public LoggingExceptionResolver(String category) {
super();
this.warnLogger = LoggerFactory.getLogger(category); // or whatever log implementation
}
}
<bean id="exceptionResolver" class="package.name.LoggingExceptionResolver">
<constructor-arg value="abcdefg"/>
<property name="exceptionMappings">
<map>
<entry key="java.lang.Exception" value="error"/>
</map>
</property>
</bean>
But this is basically the same thing as:
<!-- whatever the implmentation/class name is -->
<bean id="log" class="org.apache.log4j.logger.Logger" factory-method="getLogger">
<constructor-arg value="abcdefg"/>
</bean>
<bean id="exceptionResolver" class="package.name.LoggingExceptionResolver">
<property name="warnLogger" ref="log" />
<property name="exceptionMappings">
<map>
<entry key="java.lang.Exception" value="error"/>
</map>
</property>
</bean>
with the correct log4j.logger.abcdefg=WARN
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With