Изменение формата миллисекунд в logging Python 2.6

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Сочетание %(asctime)s и %(msecs)03d при форматировании логов в Python работает безупречно. Вот пример:

Python
Скопировать код
import logging

# Создаем форматтер с миллисекундами для подсчета времени.
formatter = logging.Formatter('%(asctime)s.%(msecs)03d %(message)s', '%Y-%m-%d %H:%M:%S')

# Настраиваем логгер, используя созданный форматтер.
logger = logging.getLogger('app')
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
logger.setLevel(logging.INFO)

# В логи выводим сообщение с отметкой в миллисекундах для точности времени.
logger.info('Сообщение в лог с миллисекундами')

С таким форматтером миллисекунды будут отображаться с точностью до трех десятичных знаков, что обеспечивает прозрачность и консистентность логов.

Кинга Идем в IT: пошаговый план для смены профессии

Создаем пользовательский форматтер для особых случаев

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

Python
Скопировать код
import logging
from datetime import datetime

class CustomFormatter(logging.Formatter):
    """Пользовательский форматтер для индивидуального форматирования логов."""

    def formatTime(self, record, datefmt=None):
        ct = datetime.fromtimestamp(record.created)
        if datefmt:
            s = ct.strftime(datefmt)
        else:
            s = ct.strftime(self.default_time_format)
            if self.default_msec_format:
                s = self.default_msec_format % (s, record.msecs)
        return s

# Создаем форматтер с миллисекундами и индивидуальным форматированием.
formatter = CustomFormatter('%(asctime)s %(message)s', '%Y-%m-%d %H:%M:%S.%f')

# Далее следует обычная процедура, как описано в разделе "Быстрый ответ"

Класс CustomFormatter позволяет форматировать время через метод formatTime, включая отображение микросекунд, если это необходимо, с помощью %f.

Простые настройки с помощью basicConfig

Вы можете настроить логирование в одну строку с помощью logging.basicConfig(). В более новых версиях Python добавлены дополнительные опции форматирования, такие как %f для микросекунд:

Python
Скопировать код
logging.basicConfig(format='%(asctime)s.%(msecs)03d %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

Перед вами идеальный способ для быстрой настройки корневого логгера.

Навигация по версиям Python как эксперт

Та версия Python, которую вы используете, может влиять на вашу работу с логированием. Имейте в виду следующие особенности каждой версии:

  • Для Python 2.6 используйте default_msec_format в пользовательском форматтере.
  • Для более новых версий (Python 2.7 и далее) воспользуйтесь %f в записи datefmt.

Следуя этим рекомендациям, вы избежите неожиданных проблем при работе в различных средах или после обновлений.

Стандартизированные форматы с ISO 8601 и RFC 3339

Если вам необходим стандартизированный формат времени, рассмотрите ISO 8601 или RFC 3339, которые также поддерживают миллисекунды:

Python
Скопировать код
logging.basicConfig(format='%(asctime)s.%(msecs)03d %(message)s', datefmt='%Y-%m-%dT%H:%M:%S.%fZ')

Этот формат временных меток будет универсально понятен.

Визуализация

Используйте миллисекунды для подсветки

Временная шкала может выглядеть примерно так:

Markdown
Скопировать код
Временной Лоскут: детализированная лента времени — [ЧЧ:мм:сс.fff]

Миллисекунды добавят к вашей истории ярких красок, словно маленькие огоньки:

Markdown
Скопировать код
Тканевое Время: Подсветка минутных меток — [ЧЧ:мм:сс.fff]

Совместимость – залог эффективной визуализации

Убедитесь, что ваши инструменты визуализации могут корректно обрабатывать добавленные миллисекунды.

Разработка точных решений для уникальных потребностей

Специфические сценарии использования

В некоторых случаях могут потребоваться специализированные форматы времени, например, при:

  • Интеграции с системами, которые используют свойственные им форматы времени.
  • Создании логов, предназначенных для прочтения в разных странах.
  • Соответствии отраслевым стандартам представления времени.

В этих случаях создание пользовательских форматтеров упрощает реализацию подобных требований.

Никаких дополнительных зависимостей

Описанные способы не требуют дополнительных зависимостей. Модули logging и datetime, содержащиеся в стандартной библиотеке Python, эффективно решают задачи продвинутого форматирования времени.

Практические примеры кода: суть без излишеств

Представленные фрагменты кода демонстрируют практическое применение каждого из подходов, содействуя практическому освоению форматирования логов.

Полезные материалы