2017-08-30 6 views
2

私はアプリケーションから送信されたHTTP 500を追跡しようとしていました。彼らはlocalhost_access_log.txtにように表示されます。1バイトの応答でHTTP 500を返すTomcat

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

だから私はタイプ5xxのすべての例外と応答をキャッチし、自分のアプリケーションへのロギングを追加しました。これらのログには決して入力されません。さらに、あなたが見るように、応答の長さは1バイトです。決してそうであってはいけません。私が使用しているWebフレームワーク、Liftは、5xxの応答よりも大きな応答を返します。

私はそうのようにすべての問題をキャッチしようとしています:それも私のコードを打っかしらrequestLogに記録されて何もないように

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) 
} 

を。

根本的な原因を調べるためにTomcatでより良いログを有効にするにはどうすればよいですか?

catalina.outには何もありません。

+1

これはかなり奇妙です。 'localhost_access_log.txt'はTomcatやnginxのようなリバースプロキシによって生成されていますか? –

+0

これは 'org.apache.catalina.valves.AccessLogValve'のログファイルとして定義されているので、Tomcatです。 –

+0

いくつか余分の利点として、 'req.context.setAttribute(" startedLiftProcessing "、true)'を実行する関数を 'LiftRules.early'に与えてみてください。次に、その属性を '%{startedLiftProcessing} r'または'%{startedLiftProcessing} s 'としてログに追加できるはずです。どのTomcatバージョン? –

答えて

1

タイプ5xxのエラーは、サーバー上の予期しないエラーの兆候です。理想的には、開発者はこれらの5xxエラーが発生しないように、コード内に可能なすべてのtry-catchブロックを配置する必要があります。同じメモで、コード内の特定の5xxエラーを調べるのではなく、すべてのタイプのエラーをキャッチしてください。さもなければ、これらのログは決してログに記録されません。

+0

OPごとに、私はそれをしました。私は同様に応答の長さ - 1バイトで混乱しています。 5xxは、私が使用しているフレームワーク(リフト)を使用して、通常ははるかに大きな応答を返します。 –

関連する問題