Изменение формата миллисекунд в logging Python 2.6
Быстрый ответ
Сочетание %(asctime)s
и %(msecs)03d
при форматировании логов в 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('Сообщение в лог с миллисекундами')
С таким форматтером миллисекунды будут отображаться с точностью до трех десятичных знаков, что обеспечивает прозрачность и консистентность логов.
Создаем пользовательский форматтер для особых случаев
Если потребуется особый формат времени, вы можете создать пользовательский форматтер. Вот пример такого подхода:
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
для микросекунд:
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, которые также поддерживают миллисекунды:
logging.basicConfig(format='%(asctime)s.%(msecs)03d %(message)s', datefmt='%Y-%m-%dT%H:%M:%S.%fZ')
Этот формат временных меток будет универсально понятен.
Визуализация
Используйте миллисекунды для подсветки
Временная шкала может выглядеть примерно так:
Временной Лоскут: детализированная лента времени — [ЧЧ:мм:сс.fff]
Миллисекунды добавят к вашей истории ярких красок, словно маленькие огоньки:
Тканевое Время: Подсветка минутных меток — [ЧЧ:мм:сс.fff]
Совместимость – залог эффективной визуализации
Убедитесь, что ваши инструменты визуализации могут корректно обрабатывать добавленные миллисекунды.
Разработка точных решений для уникальных потребностей
Специфические сценарии использования
В некоторых случаях могут потребоваться специализированные форматы времени, например, при:
- Интеграции с системами, которые используют свойственные им форматы времени.
- Создании логов, предназначенных для прочтения в разных странах.
- Соответствии отраслевым стандартам представления времени.
В этих случаях создание пользовательских форматтеров упрощает реализацию подобных требований.
Никаких дополнительных зависимостей
Описанные способы не требуют дополнительных зависимостей. Модули logging
и datetime
, содержащиеся в стандартной библиотеке Python, эффективно решают задачи продвинутого форматирования времени.
Практические примеры кода: суть без излишеств
Представленные фрагменты кода демонстрируют практическое применение каждого из подходов, содействуя практическому освоению форматирования логов.