Повторяющаяся проблема с журналированием в приложении Python Tornado - PullRequest
0 голосов
/ 14 апреля 2019

Я использую приложение торнадо python (v 3.6) (полагаю, последняя версия 6.x). Я пытаюсь удалить свои операторы print () и использовать вместо этого модуль журналирования. Сначала я создал эту функцию get_logger ():

def get_logger(lname, debug_level=logging.DEBUG):
  lname_logger = logging.getLogger(lname)
  lname_logger.setLevel(debug_level)
  ch = logging.StreamHandler(sys.stdout)
  ch.setLevel(debug_level)

  FORMAT = '%(asctime)s,[%(filename)s:%(lineno)d] %(message)s'
  formatter = logging.Formatter(FORMAT)
  ch.setFormatter(formatter)
  lname_logger.addHandler(ch)
  return lname_logger

В моем обработчике приложения торнадо у меня есть следующий код (я удалил ненужные биты и сократил его до минимума):

class App(object):

   def __init__(self):
     self.logger = utils.get_logger("myApp")
     tornado.options.parse_command_line()
     self.application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/login", LoginHandler),
        ...
     ])
     self.application.listen(options.port)
     self.logger.info("Listening on port %d" % options.port)
     tornado.ioloop.IOLoop.current().start()

Когда я запускаю этот код, я вижу, что запись в журнал происходит дважды так:

2019-04-14 12:50:01,636,[server.py:231] Listening on port 8000
[I 190414 12:50:01 server:231] Listening on port 8000

Теперь интересным моментом является то, что если я запускаю код регистрации вне приложения торнадо в отдельном файле python, он печатает только первую строку. В приложении торнадо каждый вызов печатается дважды и в двух разных форматах (вторая строка окрашена в зависимости от уровня ведения журнала и более информативна). Я полагаю, что вторая строка напечатана Торнадо через некоторые встроенные журналы, которые я запускаю. Так как мне настроить регистрацию, чтобы не печатать дубликаты и использовать только второй вид?

1 Ответ

0 голосов
/ 14 апреля 2019

Хорошо, я нашел ответ, перечитывая документацию по встроенному механизму журналирования Tornado:

This formatter is enabled automatically by tornado.options.parse_command_line or tornado.options.parse_config_file (unless --logging=none is used).

Именно это я и делал.Когда я переключаюсь на использование только регистратора Tornado, дубликаты исчезают.

...