Chciałbym skonfigurować w swoim projekcie log4j'a tak żeby logował runtime'owe wyjątki razem z stack trace'm. Samo logowanie wystąpienia wyjątku nie jest problem, trudności pojawiają z logowaniem stack trace'a.

W celu przechwycenia wyjątku zarejestrowałem sobie takiego beana:

    
    @Bean
    public SimpleMappingExceptionResolver createSimpleMappingExceptionResolver(){
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        mappings.setProperty("Exception", "exception");

        resolver.setExceptionMappings(mappings);
        resolver.setDefaultErrorView("error");
        resolver.setWarnLogCategory("example.MvcLogger");
        return resolver;
    }

, który przechwytuje wyjątek i loguje tylko coś takiego:
2016-11-23 22:37:54 WARN MvcLogger:189 - Resolved exception caused by Handler execution: java.lang.RuntimeException: some message

Zajrzałem sobie do kodu źródłowego tego resolvera i znalazłem taką metodę:

protected void logException(Exception ex, HttpServletRequest request) {
		if (this.warnLogger != null && this.warnLogger.isWarnEnabled()) {
			this.warnLogger.warn(buildLogMessage(ex, request));
		}
	}

Wynika z tego, że stack trace rzeczywiście nie będzie logowany, bo do metody loggera nie jest przekazywany wyjątek. Rozwiązaniem mojego problemu wydaje się przeciążenie metody logException tak aby logowała stack trace, ale wydaje mi się, że jest to na tyle potrzebne zachowanie że powinno być jakieś łatwiejsze, bardziej domyślne rozwiązanie. W związku z tym chciałbym zapytać jak to się powinno robić według was?

Dodatkowo dołączam konfigurację log4j:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <File name="File" fileName="${sys:catalina.home}/logs/money-manager/appLog.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </File>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <appenderRef ref="File"/>
        </Root>
        <Logger name="com.corriel" level="DEBUG" additivity="true">
            <appender-ref ref="File" level="DEBUG" />
        </Logger>
        <logger name="org.hibernate.SQL" level="DEBUG">
            <AppenderRef ref="Console"/>
        </logger>
        <logger name="org.hibernate.type" level="TRACE">
            <AppenderRef ref="Console"/>
        </logger>
    </Loggers>
</Configuration>