我一直在尝试跟踪我的应用程序发送的一些HTTP 500。它们在localhost_access_log.txt中显示为:

127.0.0.1 - - [30/Aug/2017:16:27:46 +0000] "POST /user/174 HTTP/1.1" 500 1


因此,我在应用程序中添加了日志记录,以捕获所有5xx类型的异常和响应。这些日志从不填充。另外,正如您所看到的,响应的长度是一个字节,永远不会这样。我使用的Web框架Lift将返回比5xx更大的响应。

我正试图抓住所有问题:

LiftRules.onEndServicing.append {
    case (req, Full(resp)) => {
      resp.toResponse.code.toString match {
        case internalServerError if(internalServerError.startsWith("5")) => requestLogError(req, resp.toString)
        case _ =>
      }
    }
    case _ =>
}

LiftRules.exceptionHandler.prepend {
  case (runMode, req, exception) =>
    requestLogError(req, Throwables.getStackTraceAsString(exception))
    XhtmlResponse((<html> <body>Something unexpected happened while serving the page at {req.uri}</body> </html>), S.htmlProperties.docType, List("Content-Type" -> "text/html; charset=utf-8"), Nil, 500, S.legacyIeCompatibilityMode)
}


因此,由于没有任何记录在requestLog中,所以我想知道它是否还在打我的代码。

如何在Tomcat中启用更好的日志记录以查看根本原因?

catalina.out也没有任何内容。

最佳答案

5xx类型的错误表示服务器上发生意外错误。理想情况下,开发人员应将所有可能的try-catch块放在代码内,以免发生这些5xx错误。同样,请尝试捕获所有类型的错误,而不要在代码中查找特定的5xx错误,否则这些日志将永远不会被记录。

09-26 11:45