Как вы можете догадаться и можете подтвердить, изучив исходный файл /usr/local/google_appengine/google/appengine/tools/dev_appserver.py
, журналы не записываются на диск (экземпляр cStringIO.StringIO
используется для хранения их в памяти, как и остальная часть кода ориентирован на запись их "в файлоподобный объект").
Я бы порекомендовал написать собственный скрипт сервера приложений, который импортирует dev_appserver
, подклассы dev_appserver.ApplicationLoggingHandler
и переопределяет только один метод:
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()
Вы также должны убедиться, что этот класс используется вместо стандартного, например, путем подкласса диспетчера или обеспечения использования его возможности внедрения зависимостей. (dev_appserver_main.py
позволяет вам контролировать это лучше, я думаю).
Я думаю, что этот подход к настройке гораздо более обременителен, чем должен быть (в конце концов, совершенно нормально, чтобы журналы записывались в файл, в конце концов - либо отображать их по-разному, как вы хотите, либо обрабатывать их позже с помощью некоторого вспомогательного средства). сценария), и поэтому я бы также рекомендовал разместить запрос функции на трекере движка приложения: dev_appserver.py
должен принять еще один флаг, который, если указан, дает путь для записи журналов на диск.
И, если честно, если бы мне сейчас понадобилась эта функция, я бы сделал это грязным способом: отредактировал этот файл .py
(и связанный с ним _main.py
), чтобы добавить указанный флаг и его использование. Всего должно быть дюжина строк, гораздо проще, чем "канонический" способ, который я только что обрисовал. Конечно, это грязно , потому что каждый раз, когда появляется новый SDK, вам придется применять исправление снова, снова и снова ... именно поэтому нужно также предложить патч на трекере GAE, как часть предложенного мною запроса, надеясь, что он скоро будет принят! -)