Журнал торнадо по умолчанию, как это
[I 160418 21:51:16 web:1946] 200 GET /hello (123.123.123.123) 21.72ms
Я хочу изменить формат даты на этот
[I 2016-04-18 21:51:16 web:1946] 200 GET /hello (123.123.123.123) 21.72ms
Как это реализовать?
Журнал торнадо по умолчанию, как это
[I 160418 21:51:16 web:1946] 200 GET /hello (123.123.123.123) 21.72ms
Я хочу изменить формат даты на этот
[I 2016-04-18 21:51:16 web:1946] 200 GET /hello (123.123.123.123) 21.72ms
Как это реализовать?
Tornado с использованием модуля ведения журнала из стандартной библиотеки. Это означает, что когда вы настраиваете модуль логирования, вы настраиваете журналы Tornado. И когда вы в своем приложении выводите логи через этот стандартный модуль, они попадают в логи Торнадо.
1. Лучший способ настроить формат даты и времени ведения журнала Tornado — настроить обработчики ведения журнала после анализа конфигурации Tornado.
import logging
from tornado.options import parse_command_line
parse_command_line() # parsing Tornado's default config
formatter = logging.Formatter(
'[%(levelname)1.1s %(asctime)s.%(msecs)d '
'%(module)s:%(lineno)d] %(message)s',
"%Y-%m-%d %H:%M:%S"
) # creating own format
for handler in logging.getLogger().handlers: # setting format for all handlers
handler.setFormatter(formatter)
logging.info("message") # will display in tornado logs info:
# [I 2018-11-07 17:37:20.463 datefmt_0:14] message
2. Другой способ — удалить обработчики перед настройкой:
import logging
from tornado.options import parse_command_line
for hendler in logging.getLogger().handlers: # remove current handlers
logging.root.removeHandler(hendler)
logging.basicConfig(format='[%(levelname)1.1s %(asctime)s.%(msecs)d '
'%(module)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
parse_command_line() # parsing tornado default config
logging.info("message") # will display in tornado log info:
# [I 2018-11-01 17:27:09.824 datefmt:11] message
3. Попробуйте также (я взял это отсюда: https://github.com/tornadoweb/tornado/issues/1960):
import logging
import logging.config
logging.config.dictConfig({
'version': 1,
'formatters': {
'default': {
'class': 'tornado.log.LogFormatter',
'format': '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s',
},
},
'handlers': {
'default': {
'class': 'logging.StreamHandler',
'formatter': 'default',
},
},
'root': { # settings of root logger.
'level': 'DEBUG',
'handlers': ['default'],
'propagate': False,
},
})
logging.info("message")
4. Попробуйте также (отсюда Python Logging: dictConfig):
import logging
import logging.handlers
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter(
'[%(levelname)1.1s %(asctime)s.%(msecs)d '
'%(module)s:%(lineno)d] %(message)s',
"%Y-%m-%d %H:%M:%S")
)
logging.root.setLevel(logging.DEBUG)
logging.root.addHandler(console_handler)
logging.info("message")
Вы можете изменить формат даты, как описано здесь: http://www.tornadoweb.org/en/stable/log.html
datefmt (string) – Datetime format. Used for formatting (asctime) placeholder in prefix_fmt.