7.9 KiB
7.9 KiB
LogManager
Модуль логирования с выводом в консоль и файл с поддержкой ротации.
Установка
import src.utils.log_manager as log
Быстрый старт
import src.utils.config_manager as config
import src.utils.log_manager as log
# Загрузка конфигурации
config.load()
# Регистрация глобальных параметров логирования
log.register_global_params()
# Регистрация модулей
log.register(module="my_module", log_console=True, log_file="my_module.log")
# Инициализация
log.setup()
# Использование
logger = log.get_logger("my_module")
logger.print("Сообщение") # в консоль
logger.print("Отладочное", level="debug") # с уровнем
logger.print("Ошибка", level="error") # в stderr
Константы
from src.utils.log_manager import (
LOG_CATEGORY,
LOG_CONSOLE,
LOG_STDERR,
LOG_FILE,
LOG_PATH,
LOG_LEVEL,
LOG_FILE_LEVEL,
LOG_ROTATION,
LOG_ROTATION_SIZE,
LOG_ROTATION_COUNT,
LOG_TIMESTAMP,
LOG_BUFFERED,
MODULE_LOG_CONSOLE,
MODULE_LOG_STDERR,
MODULE_LOG_FILE,
MODULE_LOG_LEVEL,
DEFAULT_TIMESTAMP,
DEFAULT_LOG_LEVEL,
DEFAULT_FILE_LEVEL,
DEFAULT_LOG_PATH,
DEFAULT_LOG_FILE,
DEFAULT_ROTATION,
DEFAULT_ROTATION_SIZE,
DEFAULT_ROTATION_COUNT,
)
| Константа | Значение | Описание |
|---|---|---|
LOG_CATEGORY |
"logger" |
Категория параметров логера |
LOG_CONSOLE |
"log_console" |
Включить вывод в консоль |
LOG_STDERR |
"log_stderr" |
Включить вывод в stderr |
LOG_FILE |
"log_file" |
Имя файла логов |
LOG_PATH |
"log_path" |
Путь к директории логов |
LOG_LEVEL |
"log_level" |
Уровень логирования |
LOG_FILE_LEVEL |
"log_file_level" |
Уровень для файла |
LOG_ROTATION |
"log_rotation" |
Тип ротации: size или external |
LOG_ROTATION_SIZE |
"log_rotation_size" |
Размер файла для ротации |
LOG_ROTATION_COUNT |
"log_rotation_count" |
Количество ротированных файлов |
LOG_TIMESTAMP |
"log_timestamp" |
Формат timestamp |
LOG_BUFFERED |
"log_buffered" |
Буферизация записей |
DEFAULT_TIMESTAMP |
"%Y-%m-%d %H:%M:%S" |
Формат времени по умолчанию |
Регистрация глобальных параметров
log.register_global_params()
Регистрирует параметры в config_manager:
logger.log_console- включить вывод в консоль (default:true)logger.log_stderr- включить stderr для ошибок (default:true)logger.log_file- имя файла логов (default:app.log)logger.log_path- путь к директории (default:./log)logger.log_level- уровень для консоли (default:INFO)logger.log_file_level- уровень для файла (default:DEBUG)logger.log_rotation- тип ротации:sizeилиexternal(default:size)logger.log_rotation_size- размер для ротации (default:10MB)logger.log_rotation_count- количество файлов (default:5)logger.log_timestamp- формат timestamp (default:%Y-%m-%d %H:%M:%S)
Регистрация модуля
log.register(
module="my_module", # имя модуля
log_console=True, # вывод в консоль
log_stderr=False, # вывод в stderr
log_file="my.log", # имя файла (None = не писать в файл)
log_level="INFO" # уровень (None = наследуется)
)
Параметры модуля
Если параметр не указан или None, используется глобальное значение.
Конфигурация в global.yaml
# Глобальные настройки
logger.log_console: true
logger.log_stderr: true
logger.log_file: "app.log"
logger.log_path: "./log"
logger.log_level: "INFO"
logger.log_file_level: "DEBUG"
logger.log_rotation: "size"
logger.log_rotation_size: "10MB"
logger.log_rotation_count: 5
logger.log_timestamp: "%Y-%m-%d %H:%M:%S"
logger.log_buffered: false
# Настройки для конкретного модуля (переопределяют глобальные)
my_module.log_console: false
my_module.log_file: "custom.log"
my_module.log_level: "DEBUG"
API
Регистрация
log.register_global_params() # регистрация глобальных параметров
log.register(module, log_console, log_stderr, log_file, log_level)
Получение логера
logger = log.get_logger("module_name")
Вывод сообщений
logger.print("message") # в консоль (stdout)
logger.print("msg", level="debug") # уровень для лога
logger.print("msg", level="info") # default
logger.print("msg", level="warning") # в stderr
logger.print("msg", level="error") # в stderr
log.print("global message") # от корневого логера
Уровни логирования
debug- stdout + файл (DEBUG)info- stdout + файл (INFO, default)warning- stderr + файл (WARNING)error- stderr + файл (ERROR)
Инициализация
log.setup() # вызывается при старте приложения
Ротация логов
По размеру (log_rotation=size)
Используется RotatingFileHandler. При достижении log_rotation_size происходит ротация.
logger.log_rotation: "size"
logger.log_rotation_size: "10MB"
logger.log_rotation_count: 5
Файлы: app.log, app.log.1, app.log.2, ...
Внешняя (log_rotation=external)
Используется базовый FileHandler. Ротацией управляет внешняя система (logrotate).
logger.log_rotation: "external"
Правила написания модулей
Обязательно использовать logger.print() вместо print()
# НЕПРАВИЛЬНО
print("Сообщение")
# ПРАВИЛЬНО
logger = log.get_logger("my_module")
logger.print("Сообщение")
Инициализация модуля
# my_module/__init__.py
import src.utils.log_manager as log
def init():
log.register(module="my_module", log_console=True, log_file="my_module.log")
def main():
log.print("Модуль запущен")
Примеры
Базовое использование
import src.utils.config_manager as config
import src.utils.log_manager as log
config.load()
log.register_global_params()
log.register(module="app", log_console=True)
log.setup()
logger = log.get_logger("app")
logger.print("Application started")
С настройками из конфига
import src.utils.config_manager as config
import src.utils.log_manager as log
config.load()
log.register_global_params()
# Регистрация модулей с параметрами из конфига
log.register(module="model")
log.register(module="ui", log_console=True)
log.setup()
Разные форматы timestamp
# Короткий
logger.log_timestamp: "%H:%M:%S"
# Полный
logger.log_timestamp: "%Y-%m-%d %H:%M:%S"
# С микросекундами
logger.log_timestamp: "%Y-%m-%d %H:%M:%S.%f"