Как настроить базовую конфигурацию логирования с использованием `logging.basicConfig()`?

Для базовой конфигурации логирования с использованием logging.basicConfig(), обычно указывают уровень логирования (level), формат сообщения (format) и, опционально, имя файла (filename) или объект потока (stream). Например:
import logging

logging.basicConfig(level=logging.INFO, 
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    filename='app.log', # Опционально
                    filemode='w')      # Опционально, по умолчанию 'a' (append)

logging.info('Это информационное сообщение.')
Это настроит логгер для записи сообщений с уровнем INFO и выше в файл app.log с указанным форматом.

Базовая конфигурация логирования в Python с использованием logging.basicConfig() - это простой способ начать логировать события в вашей программе. Она настраивает корневой логгер с предопределенными настройками.

Основные аспекты и примеры:

  • Импорт модуля logging: Начните с импорта модуля logging.

    import logging
  • Вызов logging.basicConfig(): basicConfig() настраивает корневой логгер. Обычно вызывается только один раз в вашем приложении, до каких-либо вызовов logging.debug(), logging.info() и т.д.

    logging.basicConfig(level=logging.INFO)

    Аргумент level определяет минимальный уровень логирования, который будет обработан. В этом примере установлена logging.INFO, это означает, что будут логироваться сообщения уровней INFO, WARNING, ERROR и CRITICAL.

  • Логирование сообщений: Теперь можно использовать функции логирования для записи сообщений.

    logging.info("Это информационное сообщение.")
    logging.debug("Это отладочное сообщение.") # Не отобразится, т.к. level = INFO
    logging.warning("Это предупреждение!")
    logging.error("Произошла ошибка.")
    logging.critical("Критическая ошибка! Приложение может быть нестабильно.")
  • Полный пример:

    import logging
    
    # Настраиваем базовый логгер
    logging.basicConfig(level=logging.INFO, 
                        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # Используем логгер
    logging.info("Приложение запущено.")
    
    try:
        result = 10 / 0
    except ZeroDivisionError:
        logging.exception("Ошибка деления на ноль!") # Логирует ошибку и traceback
    
    logging.info("Приложение завершено.")

    В этом примере также добавлен аргумент format, который позволяет настроить формат выводимых сообщений. %(asctime)s - время сообщения, %(name)s - имя логгера (по умолчанию 'root'), %(levelname)s - уровень логирования, %(message)s - само сообщение. Функция logging.exception() используется для логирования исключений вместе с трассировкой стека.

  • Аргументы basicConfig():

    • level: Уровень логирования (например, logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL).
    • filename: Имя файла для записи логов. Если указан, логи будут записываться в файл.
    • filemode: Режим открытия файла (например, 'w' для перезаписи, 'a' для добавления). По умолчанию 'a'.
    • format: Формат выводимых сообщений. Используйте placeholders, такие как %(asctime)s, %(name)s, %(levelname)s, %(message)s.
    • datefmt: Формат даты и времени.
    • stream: Объект потока для записи логов (например, sys.stdout, sys.stderr).

Важно помнить:

  • Вызов basicConfig() после того, как логгер уже настроен, может не иметь эффекта, если корневой логгер уже был настроен другим способом. Поэтому вызовите его в самом начале вашей программы.
  • Для более сложной конфигурации логирования (например, использование разных обработчиков, фильтров, форматеров) рекомендуется использовать конфигурационные файлы или программную настройку логгеров и обработчиков напрямую, а не только basicConfig().
0