【问题标题】:Tomcat and Logging Stacktrace InfoTomcat 和记录 Stacktrace 信息
【发布时间】:2012-01-19 15:18:30
【问题描述】:

我遇到了一个非常奇怪的问题。当我记录堆栈跟踪时,它们似乎源自我调用记录器的行,而不是发生错误的行。这会在跟踪错误方面造成一些严重的时间浪费。

使用 tomcat6、openjdk 6 和 log4j。

有什么想法吗?提前感谢您提供的任何帮助。

以下是示例。代码,第 137-142 行:

try {
    req.getContentType().trim();
} catch (Exception e) {
    log.error("DEBUG: " + e.getLocalizedMessage(), e.fillInStackTrace());
        e.printStackTrace();
}

日志:

2012-01-19 10:13:25,393 [http-8080-1] ERROR com.myservlet.servlet.Servlet2  - DEBUG: null
java.lang.NullPointerException
    at com.myservlet.servlet.Servlet2.doPost(Servlet2.java:140)
    at com.myservlet.servlet.Servlet2.doGet(Servlet2.java:292)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) ...

【问题讨论】:

    标签: java tomcat logging stack-trace


    【解决方案1】:

    不要填写堆栈跟踪内容,您的异常应该会完全填充。

    简单的做

    log.error("My message", e);
    

    【讨论】:

    • 解决了。我们做了一些基于非容器的 java 代码,我一定是从那里借用了那个日志模式。无论出于何种原因,该模式适用于我们的非基于容器的代码,但不适用于 tomcat。将来某个时候将不得不调整所有情况。非常感谢。
    • 无论您的容器或环境是什么,该模式都不适合记录其他代码位引发的异常。它仅适用于您人为地创建一个异常,仅用于记录代码中该确切点的堆栈跟踪。
    • 谢谢。这现在更有意义了。在我之前拥有此代码的人正在用它做一些非常奇怪的事情。我必须在技术和语言之间跳来跳去,所以很容易迷路。猜猜这是那个时代之一。 :)
    猜你喜欢
    • 2012-09-14
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2014-03-06
    相关资源
    最近更新 更多