Как догадка, и может подтвердить, изучая исходный файл /usr/local/google_appengine/google/appengine/tools/dev_appserver.py
, журналы не записываются на диск (a 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, так как часть запроса художественному предложил я, надеясь, что он получает принято в ближайшее время -)
Поскольку для этого требуется запустить сценарий самостоятельно (а не через пусковую установку), вы можете просто запустить " dev_appserver.py <...> | tee logfile " –