2010-02-09 7 views
18

Ich weiß, dass Sie die rohen Zugriffsprotokolle mit appcfg.py herunterladen können, aber ich bin wirklich interessiert an allen Informationen rund um eine bestimmte Anfrage wie Python Logging-Anweisungen, Ausnahmen und API-Statistiken (nur wie der Online-Log-Viewer). Weiß jemand, ob es einen Weg gibt, diese Information auf andere Weise zu bekommen, als sie selbst zu bauen?Download Log von AppEngine Einschließlich Python Log Statements

Wenn jemand sich fragt, wollen wir einige kontinuierliche statistische Analyse für Probleme machen und sie auf einem großen Bildschirm an einer Wand im Büro anzeigen.

Antwort

21

Sure - passieren nur die --severity Flagge appcfg.py:

$ appcfg.py help request_logs 
Usage: appcfg.py [options] request_logs <directory> <output_file> 

Write request logs in Apache common log format. 

The 'request_logs' command exports the request logs from your application 
to a file. It will write Apache common log format records ordered 
chronologically. If output file is '-' stdout will be written. 

Options: 
    -h, --help   Show the help message and exit. 
    -q, --quiet   Print errors only. 
    -v, --verbose   Print info level logs. 
    --noisy    Print all logs. 
    -s SERVER, --server=SERVER 
         The server to connect to. 
    --insecure   Use HTTP when communicating with the server. 
    -e EMAIL, --email=EMAIL 
         The username to use. Will prompt if omitted. 
    -H HOST, --host=HOST Overrides the Host header sent with all RPCs. 
    --no_cookies   Do not save authentication cookies to local disk. 
    --passin    Read the login password from stdin. 
    -A APP_ID, --application=APP_ID 
         Override application from app.yaml file. 
    -V VERSION, --version=VERSION 
         Override (major) version from app.yaml file. 
    -n NUM_DAYS, --num_days=NUM_DAYS 
         Number of days worth of log data to get. The cut-off 
         point is midnight UTC. Use 0 to get all available 
         logs. Default is 1, unless --append is also given; 
         then the default is 0. 
    -a, --append   Append to existing file. 
    --severity=SEVERITY Severity of app-level log messages to get. The range 
         is 0 (DEBUG) through 4 (CRITICAL). If omitted, only 
         request logs are returned. 
    --vhost=VHOST   The virtual host of log messages to get. If omitted, 
         all log messages are returned. 
    --include_vhost  Include virtual host in log messages. 
    --end_date=END_DATE End date (as YYYY-MM-DD) of period for log data. 
         Defaults to today. 
+0

Wie könnte ich: https://gaelogapp.appspot.com/

Sie einfach diese Funktionalität in die App mit Updates app.yaml und kopieren logs.py hinzufügen habe verpasst das :-( –

15

Dies ist, was für uns wirklich gut funktioniert:

appcfg.py --append --num_days=0 --include_all request_logs /path/to/your/app/ /var/log/gae/yourapp.log 

Wie auch immer, über die Linie bekommen alle Ihre Protokolle protokollieren und an eine Protokolldatei anhängen, wenn Sie dies zuvor ausgeführt haben, andernfalls wird eine neue Protokolldatei erstellt. Es schaut sich tatsächlich Ihr vorhandenes Protokoll an (wenn es da ist) und es wird keine Duplikate erhalten. Sie können dies ohne --append ausführen, wenn Sie möchten, aber verwenden Sie es, wenn Sie Protokolldownloads automatisieren.

Der Schlüssel hier ist die --include_all Flagge, die undokumentiert zu sein scheint. Dieses Flag erhält alle Daten, die Sie sehen, wenn Sie GAE's Web Log Viewer benutzen. So erhalten Sie Felder wie: ms = 71 cpu_ms = 32 api_cpu_ms = 12 cpm_usd = 0,000921 ... etc.

OK, ich hoffe, das hilft jemandem.

BTW, wir schrieben eine Blog-Post zu diesem Thema, überprüfen Sie es hier heraus: http://bit.ly/GAE-LOGS

+0

kann ich dir nicht genug danken! meine App war schnell 90days Retention Limit und ich hatte nur keine Ahnung, jetzt alle Protokolle zu speichern, nicht nur ein Teil von ihnen. Jetzt weiß ich! =) – lenik

+0

Die ' Die Option --include-all "scheint nicht die Python-Logging-Ausgaben zu erhalten, die vom OP erwähnt werden. vielleicht nützt es das, aber nicht mehr. @Nick Johnsons Tipp, die '--severity'-Flagge zu verwenden, scheint jedoch den Trick zu machen! – hamx0r

0

Hier ist ein Weg, rohe Protokolle zugreifen, so dass Sie die Verarbeitung ohne individuelle Parsen ferner kann (auch für mich request_logs nicht alle Daten Download für den angegebenen Zeitraum).

Hier ist eine App, die sich in der appengine läuft: https://github.com/okigan/gaelogapp