Spring 3 SimpleMappingExceptionResolver warnLogКатегория log4j - PullRequest
11 голосов
/ 07 января 2011
<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>

Я бы хотел записать указанное выше исключение в файл .log, но оно не заносится в журнал = (. Может кто-нибудь прокомментировать, что может быть не так с моими свойствами log4j ... или что-то еще?

Использование Spring 3.0.5

спасибо

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

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

мое решение - метод переопределения logException in SimpleMappingExceptionResolver

новый преобразователь:

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>

Я думаю, что конфигурация logback похожа на log4j, надеюсь, вам может помочь

2 голосов
/ 13 января 2011

Попробуйте расширить его примерно так:

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>

Но это в основном то же самое, что и

<!-- 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>

с правильным log4j.logger.abcdefg=WARN

0 голосов
/ 23 февраля 2012

У вас есть несколько файлов log4j.jar, предоставленных вашему приложению несколькими загрузчиками классов, и ваше приложение почти наверняка использует неправильную конфигурацию и использует конфигурацию по умолчанию.Вы можете убедиться в этом, запустив ваше приложение с помощью

java -Dlog4j.configuration=/path/to/log4j.properties ... StartupClass

log4j всегда будет использовать системное свойство перед поиском другого файла.

Если это решит вашу проблему, вам потребуется настроить сборкувключить только те ресурсы, связанные с log4j, которые вам действительно нужны, и удалить системное свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...