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