Spring Webapp 在没有控制台日志的情况下抛出 404 错误

Posted

技术标签:

【中文标题】Spring Webapp 在没有控制台日志的情况下抛出 404 错误【英文标题】:Spring Webapp throwing 404 errors with no console log 【发布时间】:2014-03-19 04:58:30 【问题描述】:

我正在使用 Spring 框架和 Hibernate 开发一个 Web 应用程序。我的问题是我经常收到 404 错误,这是由于我在代码库中某处犯的错误导致的,但控制台中没有异常消息。因此,我很难找到错误所在,因为项目已经变得非常大,手动尝试查找问题是不切实际的。我假设 Spring 导致了这个问题,所以我的问题是:有什么方法可以启用更详细的错误消息吗?谢谢

【问题讨论】:

如果 Spring 至少在调试或信息级别没有记录任何内容,这意味着 Spring 不参与。换句话说,您的 Servlet 容器正在给您 404 响应。 你使用的是哪个网络服务器? 如果您向我们提供您的 servlet 映射和失败请求的示例,也会有所帮助。 好的答案也可以找到here 【参考方案1】:

我也遇到了 404 错误时没有控制台输出的问题。

正如在圣徒的回答中,没有控制台日志的原因之一: 这里的问题是某些错误(如 404 异常)被 Servlet 容器拦截

"spring-framework-reference-3.2.3.pdf" --> 1.3 --> Logging --> 使用Log4J,解决了我环境中的问题。

【讨论】:

【参考方案2】:

问题最终是我的一个 Hibernate 实体缺少几个注释。遵循以下链接中的过程,通过提供更详细的错误消息来帮助追踪它:

http://www.captaindebug.com/2011/07/using-hibernate-validation-annotation.html

【讨论】:

【参考方案3】:

正如一些人已经提到的那样,这里的问题是某些错误(如 404 异常)被 Servlet 容器拦截,因此永远不会到达 Spring 以及您可能设置的任何日志记录机制。所以这里的诀窍是改变你的异常的重要性顺序,以便 Spring 能够破解它。

这篇文章描述了我在 Spring 中捕获、处理和充分记录所有异常的最佳方法:http://steveliles.github.io/configuring_global_exception_handling_in_spring_mvc.html

自从我看到那篇博文以来,我一直在实施这个设置,至少可以说它是救命稻草。它将为您提供所需的详细错误消息。关键是基本上通过实现 Spring 的 HandlerExceptionResolver 和 Ordered 接口来创建自定义异常处理程序,然后返回可能的最低订单号,从而将您的异常处理移到图腾柱上:

import org.springframework.core.*;
import org.springframework.web.servlet.*

public class LoggingHandlerExceptionResolver 
implements HandlerExceptionResolver, Ordered 
    public int getOrder() 
        return Integer.MIN_VALUE; // we're first in line, yay!
    

    public ModelAndView resolveException(
        HttpServletRequest aReq, HttpServletResponse aRes,
        Object aHandler, Exception anExc
    ) 
        anExc.printStackTrace(); // again, you can do better than this ;)
        return null; // trigger other HandlerExceptionResolver's
    

【讨论】:

如果DispatcherServlet 不参与处理请求,即。容器收到的请求没有映射到它,那么你的HandlerExceptionResolver 将不会做任何事情。【参考方案4】:

404 是一个 http 错误,只有您的 Web 服务器可能知道它。很可能对于这些失败的请求,您的应用程序服务器或 Spring 容器从未被击中。查找网络服务器日志以识别问题。

解决 IIS 服务器上的 404 问题

http://blogs.iis.net/tomkmvp/archive/2009/04/27/troubleshooting-a-404.aspx

RAD Web 服务器上的 404 故障排除

http://www-304.ibm.com/support/docview.wss?uid=swg27035752&aid=1

【讨论】:

以上是关于Spring Webapp 在没有控制台日志的情况下抛出 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

spring boot .war tomcat 应用程序日志不存在

spring log4j.properties 没有日志的问题

使用tomcat 6在spring webapp中设置Commons Logging / Log4j的问题

AWS Amplify 在没有错误日志的情况下无法构建和编译

Spring Boot之logback日志最佳实践

记录一次Spring声明式事务失效的情况