2014-09-11 7 views
6

Ich versuche, meinen Fall zu debuggen, wo einfache ActiveWeb-Anwendung nicht unter Jetty ausgeführt wird. Er verhält sich, als ob keine Klassen für die Anfrageverarbeitung existieren, und gibt den Fehler 404 zurück.So aktivieren Sie die Anmeldung an der Anlegestelle?

Die Frage bezieht sich nicht auf ActiveWeb. Es geht um Jetty. Wie kann man herausfinden, dass Jetty eine Web-Applikation hat, die eine annotierte Klasse hat und sie bei einer HTTP-Anfrage ausführt?

Derzeit habe ich Jetty heruntergeladen und es funktioniert. Leider protokolliert es nicht. Nichts wird in stdout oder stderr angezeigt und keine Dateien erscheinen in logs Unterverzeichnis in dem Moment, wenn 404 Fehler zurückgibt.

So aktivieren Sie die Anmeldung an der Anlegestelle?

Dokumentation hier http://www.eclipse.org/jetty/documentation/current/configuring-logging.html und hier http://www.eclipse.org/jetty/documentation/current/configuring-jetty-request-logs.html ist nicht klar und kontrovers.

Zum Beispiel sagt die erste Seite, dass Jetty kein Java-Loggin-Framework verwendet, sondern auch eines, um eines auszuwählen. Die zweite Seite bietet ein Beispiel für die Konfiguration, sagt aber nicht, wo dieser Code stehen soll.

Antwort

19

Die Dokumentation ist korrekt, da der Begriff "Java Logging Framework" oft mit modernen Logging Frameworks wie java.util.logging, slf4j, logback, log4j, commons-logging, logkit zugeordnet ist, usw.

Diese ist richtig, Jetty benutzt keines von denen.

Jetty Protokollierung vor ALL dieser Bemühungen bei standardisierten Protokollierung Frameworks. (Jetty, und seine Protokollschicht wurde 1995 erstellt)

Dies ist, was Jetty Protokollierung (und is documented auf der Dokumentations-Website) in Bezug auf Setup und Konfiguration.

Standardverhalten:

  • Wenn slf4j in Ihrem Classpath vorhanden ist, wird es die Protokollierung von Ereignissen emittieren SLF4J mit dem Slf4jLog Handler zu behandeln.
  • Fallback zu StdErrLog, Emittieren zu System.err.

konfigurieren:

Dies kann

  1. Mit einer Systemeigenschaft in 3 verschiedenen Wegen erreicht werden, um die Protokollierung impl einstellen
# 3 different options 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog 
  1. Mit dem jetty-logging.properties selbst entdecken/Konfiguration von Classpath gefunden.

Example from jetty project itself:

# Configure for System.err output 
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog 
# Configure StdErrLog to log all jetty namespace at default of WARN or above 
org.eclipse.jetty.LEVEL=WARN 
# Configure StdErrLog to log websocket specific namespace at DEBUG or above 
org.eclipse.jetty.websocket.LEVEL=DEBUG 
  1. Code Log.setLog(Logger)

Dies ist besonders nützlich für diejenigen,

import org.eclipse.jetty.util.log.Log; 
import org.eclipse.jetty.util.log.StdErrLog; 

Log.setLog(new StdErrLog()); 
mit einstellen

Hinweise und Hinweise:

Die Ausgabe des Starts Ihres Jetty-Servers gibt Ihnen Hinweise zur verwendeten Protokollierungsimplementierung.

Normal-/Standardverhalten:

2014-09-11 10:48:38.726:INFO::main: Logging initialized @378ms 
2014-09-11 10:48:39.067:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1 

Beachten Sie, dass diese entweder keine Namespace-Deklaration oder stark abgekürzt Namespace in ihrem Ausgang. Dies sagt mir, dass die StdErrLog in Verwendung ist.

Wenn slf4j ist im Einsatz:

10:50:18.871 [main] INFO org.eclipse.jetty.util.log - Logging initialized @352ms 
10:50:19.102 [main] INFO o.e.j.d.p.ScanningAppProvider - Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1 

Dies ist eine Standardinstallation Console appender Ausgang für slf4j ->logback. Die Gesamtstruktur hier ist sehr unterschiedlich, was die StdErrLog produziert, so kann ich jetzt sagen, dass Steg über die Slf4jLog Umsetzung emittiert.

+0

Große Antwort, aber selbst nach dem Versuch all dies kann ich keine Debug-Log-Meldungen sehen. Ich habe versucht, debugging mit dem logger.setDebugEnabled (true), aber wenn ich 'logger.debug (" einige Nachricht ", neue Ausnahme") Ich bekomme keine Ausgabe. Funktioniert, wenn ich info() oder warn() –

+1

Die Konfiguration der Protokollierungsebenen wird von der gewählten Logger-Implementierung bestimmt. Mit StdErrLog werden die Eigenschaften in einer 'jetty-logging.properties' festgelegt. Bei java.util.logging wird die vollständige Protokollierung in java.util.logging, mit slf4j vorgenommen. es ist die gewählte slf4j-Implementierung, die Sie gewählt haben (wie slf4j-log12 würde bedeuten, dass Ihre log4j.xml es steuert) usw. –

+1

, um slf4j arbeiten zu lassen, fügen Sie passende jars zum lib-Ordner hinzu Meine Anlegestelle 9.3.8 hat nur sfl4j-api und Slf4jLog doc sagt, dass standardmäßig NOPlogger verwendet wird. –

Verwandte Themen