Nano Hash - криптовалюты, майнинг, программирование

Как изменить формат даты и времени регистрации Tornado?

Журнал торнадо по умолчанию, как это

[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

Как это реализовать?

18.04.2016

Ответы:


1

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")
01.11.2018

2

Вы можете изменить формат даты, как описано здесь: http://www.tornadoweb.org/en/stable/log.html

datefmt (string) – Datetime format. Used for formatting (asctime) placeholder in prefix_fmt.
18.04.2016
  • Итак, где я должен использовать эти аргументы? 19.04.2016
  • Вы можете использовать его в начале своего кода, то есть после импорта торнадо. 19.04.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..