Google App Engine / Python - Изменить форматирование журнала - PullRequest
7 голосов
/ 24 июня 2010

Как можно изменить форматирование вывода из модуля logging в Google App Engine?

Я пробовал, например:

  log_format = "* %(asctime)s %(levelname)-8s %(message)s"
  date_format = "%a, %d %b %Y %H:%M:%S"

  console = logging.StreamHandler()
  fr = logging.Formatter(log_format)
  console.setFormatter(fr)

  logger = logging.getLogger()
  logger.addFilter(SuperfluousFilter())
  logger.addHandler(console)

  logger.setLevel(logging.DEBUG)
  console.setLevel(logging.DEBUG)

  logging.error("Reconfiguring logging")

Однако это приводит к дублированию регистрацииВывод: один с обработчиком журналирования от google/appengine/tools/dev_appserver.py (или где-то в коде Google) и один из моих новых StreamHandler выше.Вышеприведенный код выводит:

ERROR    2010-06-23 20:46:18,871 initialize.py:38] Reconfiguring logging
2010-06-23 20:46:18,871 ERROR    Reconfiguring logging

Где верхняя строка явно из dev_appserver.py, нижняя строка из моего кода.

Поэтому я предполагаю, что следующий вопрос: Как можно изменитьформатирование Google App Engine, но избежать дублирования вывода?

Спасибо за чтение.

Брайан

1 Ответ

11 голосов
/ 24 июня 2010

Вот один из способов изменить формат ведения журнала, не дублируя вывод:

# directly access the default handler and set its format directly
logging.getLogger().handlers[0].setFormatter(fr)

Это что-то вроде хака, потому что вы должны иметь прямой доступ к списку handlers, хранящемуся в корневом логгере. Проблема в том, что GAE автоматически использует logging до того, как ваш код будет запущен - это создает обработчик по умолчанию. К сожалению, я не вижу, как вы можете получить ссылку на этот обработчик без прямого доступа к списку handlers, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...