import logging
   
   formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
   
   handler = logging.StreamHandler() # Или FileHandler('logfile.log')
   
   handler.setFormatter(formatter)
   
   logger = logging.getLogger('my_logger')
   
   logger.addHandler(handler)
   
   logger.warning('This is a warning message')
  
  logging.Formatter()
    Модуль logging в Python предоставляет гибкий механизм для форматирования сообщений логов.  Класс logging.Formatter() играет ключевую роль в определении структуры и содержания каждой записи в логе.  Он позволяет настроить, какие атрибуты записи лога (время, уровень логирования, имя модуля, сообщение и т.д.) будут включены в вывод и в каком порядке.
  
logging.Formatter()
    Основной способ использования logging.Formatter() — это создание его экземпляра с указанием строки формата.  Эта строка формата использует синтаксис, аналогичный строкам форматирования Python (%-форматирование или str.format()). Однако, вместо переменных, в строке формата используются так называемые "log record attributes".
  
Вот пример базового использования:
import logging
# 1. Создаем Formatter с желаемым форматом
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 2. Создаем Handler (например, StreamHandler для вывода в консоль)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
# 3. Получаем Logger
logger = logging.getLogger('my_application')
logger.setLevel(logging.DEBUG)  # Устанавливаем минимальный уровень логирования
# 4. Добавляем Handler к Logger
logger.addHandler(handler)
# 5. Используем Logger для записи сообщений
logger.debug('Это сообщение отладки.')
logger.info('Это информационное сообщение.')
logger.warning('Это предупреждение.')
logger.error('Это сообщение об ошибке.')
logger.critical('Это критическая ошибка.')
  В этом примере:
%(asctime)s:  Время создания записи лога.%(name)s:   Имя логгера (в данном случае 'my_application').%(levelname)s:  Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL).%(message)s:  Само сообщение, которое мы передаем в logger.debug(), logger.info() и т.д.
    logging.Formatter() может использовать множество других атрибутов записи лога.  Вот некоторые из наиболее распространенных:
  
%(name)s: Имя логгера.%(levelno)s: Численное значение уровня логирования (например, 10 для DEBUG, 20 для INFO).%(levelname)s: Текстовое представление уровня логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL).%(pathname)s: Полный путь к исходному файлу, в котором было вызвано сообщение лога.%(filename)s: Имя файла, в котором было вызвано сообщение лога.%(module)s: Имя модуля, в котором было вызвано сообщение лога.%(funcName)s: Имя функции, в которой было вызвано сообщение лога.%(lineno)d: Номер строки в исходном файле, где было вызвано сообщение лога.%(asctime)s: Время создания записи лога в удобочитаемом формате. Формат по умолчанию - %Y-%m-%d %H:%M:%S,uuu, но его можно изменить с помощью параметра datefmt при создании Formatter.%(process)d: ID процесса.%(thread)d: ID потока.%(message)s: Текст сообщения.datefmt)
    Вы можете настроить формат времени с помощью параметра datefmt в конструкторе logging.Formatter().  Например:
  
import logging
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger = logging.getLogger('my_application')
logger.addHandler(handler)
logger.info('Информационное сообщение.')
  В этом случае время будет отформатировано как "YYYY-MM-DD HH:MM:SS".
import logging
# Пример 1: Подробная информация, включая имя файла и номер строки
formatter1 = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s')
# Пример 2: Короткий формат, только время и сообщение
formatter2 = logging.Formatter('%(asctime)s - %(message)s', datefmt='%H:%M:%S')
# Пример 3:  Включает имя логгера
formatter3 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  Правильное форматирование логов критически важно для:
    logging.Formatter() — мощный инструмент для настройки вида сообщений логов в Python. Понимание его возможностей позволяет создавать более информативные и удобные для анализа логи, что значительно упрощает отладку, мониторинг и понимание работы приложения.  Не забывайте выбирать формат, который наилучшим образом соответствует потребностям вашего проекта.