56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
import logging
|
||
import os
|
||
from dotenv import load_dotenv
|
||
|
||
# Загрузка переменных из .env
|
||
load_dotenv()
|
||
|
||
class CustomLogger:
|
||
"""
|
||
Универсальный логгер для использования в проекте.
|
||
"""
|
||
|
||
def __init__(self, name, log_level=None):
|
||
"""
|
||
Инициализирует логгер.
|
||
|
||
:param name: Имя логгера (обычно имя функции или класса)
|
||
:param log_level: Уровень логирования (по умолчанию из .env)
|
||
"""
|
||
self.logger = logging.getLogger(name)
|
||
|
||
# Уровень логирования по умолчанию из .env
|
||
default_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
||
self.log_level = getattr(logging, log_level.upper(), getattr(logging, default_level, logging.INFO))
|
||
|
||
self.setup_logger()
|
||
|
||
def setup_logger(self):
|
||
"""
|
||
Настраивает логгер с обработчиком и форматом.
|
||
"""
|
||
self.logger.setLevel(self.log_level)
|
||
|
||
# Удаляем старые обработчики, чтобы избежать дублирования
|
||
if self.logger.hasHandlers():
|
||
self.logger.handlers.clear()
|
||
|
||
# Добавляем обработчик для файла
|
||
file_handler = logging.FileHandler("project.log")
|
||
file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
|
||
file_handler.setLevel(self.log_level)
|
||
|
||
# Добавляем обработчик для консоли
|
||
console_handler = logging.StreamHandler()
|
||
console_handler.setFormatter(logging.Formatter("%(name)s - %(levelname)s - %(message)s"))
|
||
console_handler.setLevel(self.log_level)
|
||
|
||
self.logger.addHandler(file_handler)
|
||
self.logger.addHandler(console_handler)
|
||
|
||
def get_logger(self):
|
||
"""
|
||
Возвращает настроенный логгер.
|
||
"""
|
||
return self.logger
|