gpt4 book ai didi

spring - JasperException 未出现在 log4j 文件中

转载 作者:行者123 更新时间:2023-12-02 07:20:39 25 4
gpt4 key购买 nike

我有一个使用 Spring 构建的网站,以及一个使用 Log4J 构建的日志引擎。一切都记录得很好,除了 JSP 中的错误(如下所示):

org.apache.jasper.JasperException: /views/user/registration_form.jsp (line: 80, column: 107)

该错误出现在 Eclipse 控制台中,但不会出现在 log4j 默认文件中。有什么想法吗?

非常感谢!

编辑:我的log4j配置文件:

# Root logger option
log4j.rootLogger=DEBUG, infofile, errorfile, stdout

# Log "INFO" messages to a log file
log4j.appender.infofile=org.apache.log4j.RollingFileAppender
log4j.appender.infofile.File=/Library/apache-tomcat-8.0.9/logs/info.log
log4j.appender.infofile.MaxFileSize=1MB
log4j.appender.infofile.MaxBackupIndex=1
log4j.appender.infofile.layout=org.apache.log4j.PatternLayout
log4j.appender.infofile.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.infofile.threshold=INFO

# Log "ERROR" messages to a log file
log4j.appender.errorfile=org.apache.log4j.RollingFileAppender
log4j.appender.errorfile.File=/Library/apache-tomcat-8.0.9/logs/error.log
log4j.appender.errorfile.MaxFileSize=1MB
log4j.appender.errorfile.MaxBackupIndex=1
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.errorfile.threshold=ERROR

# Log "INFO" messages to the console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.stdout.threshold=INFO

log4j.logger.org.springframework.integration.expression.ExpressionUtils=ERROR
# Hibernate
#log4j.logger.org.hibernate=INFO, hb
#log4j.logger.org.hibernate.SQL=DEBUG
#log4j.logger.org.hibernate.type=TRACE
#log4j.logger.org.hibernate.hql.ast.AST=info
#log4j.logger.org.hibernate.tool.hbm2ddl=warn
#log4j.logger.org.hibernate.hql=debug
#log4j.logger.org.hibernate.cache=info
#log4j.logger.org.hibernate.jdbc=debug

编辑2:更准确地说,我们能够处理 Spring MVC 应用程序中的任何异常,除了 View 页面抛出的异常(例如 JasperException)。

最佳答案

首先要尝试的是配置org.springframework.web.servlet.handler.SimpleMappingExceptionResolver来处理JasperException(或任何类型的异常?)。奇怪的是我无法让它工作(它似乎根本不参与堆栈)。

类似的事情:

<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"
p:defaultErrorView="uncaughtException">
<property name="exceptionMappings">
<props>
<prop key=".AccessDeniedException">error403</prop>
<prop key=".DataAccessException">error500</prop>
<prop key=".NoSuchRequestHandlingMethodException">error404</prop>
<prop key=".TypeMismatchException">error404</prop>
<prop key=".MissingServletRequestParameterException">error404</prop>
<prop key=".TimeoutException">errorTimeout</prop>
<prop key=".JasperException">error500</prop>

</props>
</property>
<property name="warnLogCategory"
value="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" />
<property name="defaultStatusCode" value="500" />
</bean>

如果这还不够,您可以随时指定您自己的 SimpleMappingExceptionResolver 扩展。

现在,如果这根本不起作用(对我来说不起作用),您可以提供自己的 javax.servlet.Filter ,这肯定会起作用(尽管可能不是“spring-est”方式)。

类似于:

public class MyExceptionHandlerFilter extends GenericFilterBean {

public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws java.io.IOException ,javax.servlet.ServletException {
try {
chain.doFilter(request, response);
} catch (Exception e) {
// do something with the exception here...
}
}

}

在 Spring 3/4 Java Config 中,您可以将该类放在 @Configuration 类中,如下所示:

@Configuration
public class MyConfig {
...
@Bean
public Filter exceptionSink() {
return new MyExceptionHandlerFilter();
}
...
}

(在 Spring 中确实有一千种方法可以做到这一点......像往常一样)。如果您使用 web.xml,它看起来像这样:

<filter>
<filter-name>ExceptionHandlerFilter</filter-name>
<filter-class>com.test.MyExceptionHandlerFilter</filter-class>
</filter>
...
<filter-mapping>
<filter-name>ExceptionHandlerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

如果您可以提供错误的堆栈跟踪,它可能会揭示您的过滤器链(将在其中寻找任何“springframework”类),以查看是否有更简洁/更类似于 spring 的方式去解决它。该链将根据您的配置而有所不同(例如,如果您正在使用它,可能会在其中看到一些 spring-security 过滤器等)。

关于spring - JasperException 未出现在 log4j 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com