2017-08-30 5 views
2

Ich habe versucht, einige HTTP 500 zu finden, die von meiner Anwendung gesendet werden. Sie erscheinen als dies in den localhost_access_log.txt:Tomcat gibt HTTP 500 mit Ein-Byte-Antworten zurück

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

So habe ich zu meiner Anwendung anmelden, um alle Ausnahmen und Antworten vom Typ 5xx zu fangen. Diese Protokolle werden nie ausgefüllt. Außerdem, wie Sie sehen können, ist die Länge der Antwort ein Byte, was niemals der Fall sein sollte. Das Web-Framework, das ich verwende, Lift, wird größere Antworten als das mit einem 5xx zurückgeben.

Ich versuche, alle Fragen, wie so zu fangen:

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

So wie nichts gibt es im requestLog protokolliert Ich frage mich, ob es überhaupt ist mein Code zu schlagen.

Wie kann ich eine bessere Protokollierung in Tomcat aktivieren, um die zugrunde liegende Ursache zu sehen?

Es gibt auch nichts in catalina.out.

+1

Das ist ziemlich merkwürdig. Wird 'localhost_access_log.txt' von Tomcat oder einer Art Reverse Proxy wie nginx oder so generiert? –

+0

Es ist definiert als die Log-Datei im 'org.apache.catalina.valves.AccessLogValve', also Tomcat. –

+0

Für etwas mehr Güte, versuchen Sie 'LiftRules.early' eine Funktion, die ein' req.context.setAttribute ("startedLiftProcessing", true) '. Dann sollten Sie in der Lage sein, dieses Attribut als '% {startedLiftProcessing} r 'oder'% {startedLiftProcessing} s' in das Log einzufügen, glaube ich. Welche Tomcat-Version? –

Antwort

1

Fehler vom Typ 5xx sind Hinweise auf unerwartete Fehler auf dem Server. Idealerweise sollte der Entwickler alle möglichen try-catch-Blöcke in den Code einfügen, damit diese 5xx-Fehler nicht auftreten. Versuchen Sie außerdem, alle Arten von Fehlern abzufangen, anstatt nach bestimmten 5xx-Fehlern im Code Ausschau zu halten, sonst werden diese Protokolle nie protokolliert.

+0

Gemäß dem OP habe ich das getan. Ähnlich verwirrt mich die Länge der Antwort - ein Byte. Ein 5xx, der das Framework verwendet, das ich verwende (Lift), würde normalerweise eine viel größere Antwort zurückgeben. –

Verwandte Themen