# LogManager Модуль логирования с выводом в консоль и файл с поддержкой ротации. ## Установка ```python import src.utils.log_manager as log ``` ## Быстрый старт ```python 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 ``` ## Константы ```python 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"` | Формат времени по умолчанию | ## Регистрация глобальных параметров ```python 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`) ## Регистрация модуля ```python log.register( module="my_module", # имя модуля log_console=True, # вывод в консоль log_stderr=False, # вывод в stderr log_file="my.log", # имя файла (None = не писать в файл) log_level="INFO" # уровень (None = наследуется) ) ``` ### Параметры модуля Если параметр не указан или `None`, используется глобальное значение. ## Конфигурация в global.yaml ```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 ### Регистрация ```python log.register_global_params() # регистрация глобальных параметров log.register(module, log_console, log_stderr, log_file, log_level) ``` ### Получение логера ```python logger = log.get_logger("module_name") ``` ### Вывод сообщений ```python 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) ### Инициализация ```python log.setup() # вызывается при старте приложения ``` ## Ротация логов ### По размеру (`log_rotation=size`) Используется `RotatingFileHandler`. При достижении `log_rotation_size` происходит ротация. ```yaml 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). ```yaml logger.log_rotation: "external" ``` ## Правила написания модулей ### Обязательно использовать `logger.print()` вместо `print()` ```python # НЕПРАВИЛЬНО print("Сообщение") # ПРАВИЛЬНО logger = log.get_logger("my_module") logger.print("Сообщение") ``` ### Инициализация модуля ```python # 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("Модуль запущен") ``` ## Примеры ### Базовое использование ```python 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") ``` ### С настройками из конфига ```python 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 ```yaml # Короткий 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" ```