2012-10-01 12 views
8

AppEngine Juli für seine Protokollierung verwendet und ich habe die logging.properties Datei und Verweis auf das in appengine-web.xmlWie kann ich das Protokollierungsformat in Google App Engine ändern

Das Problem ist so konfiguriert, dass das Format, das App Engine Stellt dar, dass die Daten im Konsolenprotokoll nach etwa 180 Zeichen in jeder Protokollzeile abgeschnitten werden. Und da ein großer Teil davon mit der Methode und dem Klassennamen (einschließlich des Pakets) und dem Datum belegt ist, gibt es nicht viel von der tatsächlichen Protokollnachricht, die herauskommt.

Ich habe versucht, meinen eigenen Formatierer, sowohl programmatisch als auch über logging.properties ohne Glück zu konfigurieren.

Ich weiß, dass ich alle meine Protokolle durch slf4j, logback oder log4j pushen könnte, aber ich glaube, dass dies dazu führt, dass alle solche Protokolle als stdout in der AppEngine log console erscheinen, die ihren eigenen Stil von Ausführlichkeit hat.

Gibt es eine Möglichkeit, ein bestimmtes Format für das AppEngine-Protokoll zu definieren, und wenn ja, wie? t wäre genug, wenn jede Protokollzeile nicht auf 180 Zeichen gekürzt würde.

+1

ich das gleiche Problem habe. Ich habe einen benutzerdefinierten Formatierer erstellt und in meiner logging.properties angegeben, aber er scheint von apfingine vollständig ignoriert zu werden. Ich bin mir ziemlich sicher, dass meine Datei logging.properties abgeholt wird, weil das Ändern des Loglevels funktioniert. – sappenin

+0

Gute Frage, aber ich denke, die Zusammenfassung ist irreführend: Das Problem ist, dass die Protokollzeilen in der App Engine-Konsole abgeschnitten sind. – Tom

Antwort

0

Nachdem ich ein wenig weiter geforscht habe, konnte ich keinen benutzerdefinierten JUL-Handler oder Formatierer bekommen, der von der Laufzeit der Appengine erkannt wird. Anstatt also, habe ich eine ServletContextListener die Wurzel Logger mit meinem eigenen benutzerdefinierten Formatierer zu initialisieren, wie folgt:

<listener> 
    <listener-class>MyLoggingListener</listener-class> 
</listener> 

Hier ist ein Beispiel ServletContextListener:

public class MyLoggingListener implements ServletContextListener 
{ 
    private static Logger LOG; 

    @Override 
    public void contextInitialized(ServletContextEvent sce) 
    { 
     LOG = Logger.getLogger(""); 
     Handler[] handlers = LOG.getHandlers(); 
     for (Handler handler : handlers) 
     { 
      handler.setFormatter(new MyLogFormatter()); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) 
    {} 
} 

Update: Der obige Code funktioniert in die Dev-Umgebung, scheint aber auf Appengine ignoriert zu werden. Zurück zum Zeichenbrett auf diesem.

2

Haben Sie versucht, die Protokoll-Download-Funktion zu verwenden: Es schneidet die Protokolle nicht ab, Sie erhalten alles zu sehen und können die Anzahl der Tage und den Schweregrad der zu ladenden Protokolleinträge angeben.

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT 

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log> 

Das ist der einzige Weg, wie ich meine Protokolldetails sehen konnte. Die Standardprotokollierungsstufe ist INFO. Daher müssen Sie die Argumente "strongness" und "num_days" wirklich verwenden, um nützlich zu sein.

Wenn Sie die Protokolle für ein Back-End herunterladen möchten, müssen Sie außerdem die Backend-Version mit der folgenden Option in der Befehlszeile angeben. Worker ist der Name des Back-Ends.

--version=worker 
+0

Hier ist der Link zur Dokumentation für die Protokolldownload-Funktion. https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Downloading_Logs –

+0

Dank Greg, das Herunterladen des Protokolls gibt mir die Möglichkeit, lange Protokollzeilen zu lesen. Aber es ist immer noch ein Schmerz in den Arsch zu lesen und ich kann nur von einer Maschine zugreifen, die auch eine App-Engine-SDK hat (die nur etwa 30% der Zeit ist). Ich suche wirklich nach einer Weise, das Protokollformat zu konfigurieren, damit ich bereit bin, Protokolle vom Browser zu lesen. – William

+0

Eigentlich, wenn Sie in diese Skriptdatei schauen, die ich erwähnte, werden Sie sehen, dass es wirklich nur die Java-Anwendung startet, und dass Sie nur diese einzelne JAR-Datei mitnehmen müssen. –

0

Blick durch den Quellcode für den App Engine-Konfigurationswerkzeug selbst, ich habe gesehen, dass alles was man tut es das gleiche LogService aufrufen, die Sie Zugang zu sich selbst durch die LogService API haben würde.

Daher ist die Antwort auf Ihre Frage wirklich so einfach wie das Löschen des Codes aus dem folgenden Link in Ihre Codebasis, es nur für den Admin-Benutzer zu sichern und Problem gelöst.

https://developers.google.com/appengine/docs/java/logservice/overview

+0

Nun, es scheint wie Massen-Overkill, eine Seite hardcodieren, um die Protokolle in einem besseren Format abzurufen, weil AppEngine nicht in der Lage scheint (oder niemand weiß wie), einen Formatierer für den Logger zu konfigurieren, der funktioniert. Aber ich schätze, das beantwortet meine Fragen dank. – William

+0

Abschließender Hinweis: Ich erkannte, dass das Klicken auf das Pluszeichen die Protokollzeilen erweitert, um den vollständigen Protokollsatz anzuzeigen. Ich habe also Zugriff auf meine vollständige Aufzeichnung, sie ist nur in einem etwas klobigen Format. – William