Wie Sie vermuten, und /usr/local/google_appengine/google/appengine/tools/dev_appserver.py
durch das Studium der Quelldatei kann bestätigen, Die Protokolle werden nicht auf die Platte geschrieben (eine cStringIO.StringIO
Instanz wird verwendet, um sie im Speicher zu halten, da der Rest des Codes so ausgerichtet ist, dass sie "in ein dateiähnliches Objekt" geschrieben werden).
Was würde ich empfehlen, ist Ihren eigenen App-Server-Skript zu schreiben, die dev_appserver
importiert, Unterklassen dev_appserver.ApplicationLoggingHandler
und überschreibt nur ein Methode:
from google.appengine.tools import dev_appserver
class MyHandler(dev_appserver.ApplicationLoggingHandler):
def __init__(self, *a, **k):
dev_appserver.ApplicationLoggingHandler.__init__(self, *a, **k)
self.thefile = open('/tmp/mylog.txt', 'w')
def emit(self, record):
dev_appserver.ApplicationLoggingHandler(self, record)
self.thefile.write(str(record) + '\n')
self.thefile.flush()
Sie müssen auch diese Klasse, um sicherzustellen, statt das verwendet wird, Standard eins, z indem Sie den Dispatcher unterklassifizieren oder sicherstellen, dass Sie die Abhängigkeitsinjektionsfunktion verwenden. (dev_appserver_main.py
lässt Sie das besser kontrollieren, denke ich).
Ich denke, diese Anpassung Ansatz ist viel mühsamer als es sein sollte (es ist völlig normal, die Protokolle in Datei geschrieben, schließlich - entweder um sie unterschiedlich anzuzeigen, wie Sie es wünschen, oder später mit einigen zu verarbeiten Hilfsskript), und so würde ich auch empfehlen, eine Feature-Anfrage in Tracker der App-Engine zu setzen: dev_appserver.py
sollte ein weiteres Flag akzeptieren, das, falls angegeben, den Pfad angibt, auf dem Protokolle auf die Festplatte geschrieben werden.
Und, um ehrlich zu sein, wenn ich diese Funktion im Augenblick brauchte, würde ich es auf die schmutzige Art und Weise tun: Bearbeiten dieser .py
Datei (und ihre verwandte _main.py
), um die Flagge und ihre Verwendung hinzuzufügen. Das sollte insgesamt ein Dutzend Zeilen sein, viel einfacher als der "kanonische" Weg, den ich gerade skizziert habe. Natürlich ist es ist schmutzig, weil jedes Mal, wenn es ein neues SDK ist, müssen Sie den Patch erneut und wieder und wieder anwenden ... weshalb sollte auch vorschlagen, das Patch auf GAE-Tracker, als Teil die Feature-Anfrage schlug ich vor, in der Hoffnung es bald angenommen wird -)
Da dies erfordert, dass Sie das Skript selbst (anstatt über den Launcher) ausführen, könnten Sie einfach ausführen " dev_appserver.py <...> | tee logfile " –