Добавлена функция настройки логирования с ротацией файлов в main.py. Реализована логика создания каталога для логов, определения уровня логирования и добавления обработчиков для консольного и файлового вывода. Эти изменения улучшают отслеживание событий и упрощают отладку приложения.

This commit is contained in:
Vlad 2025-06-04 07:46:31 +03:00
parent a25c39e9cd
commit 98ba1cb3c1

74
main.py
View File

@ -4,6 +4,7 @@ import logging
from datetime import datetime
import platform
import os
from logging.handlers import TimedRotatingFileHandler
from aiogram import Bot, Dispatcher
from aiogram.filters import Command
@ -15,6 +16,68 @@ from db import OracleDatabase
from middlewares.db import DbSessionMiddleware
def setup_logging():
"""
Настройка системы логирования с ротацией файлов и выводом в консоль
"""
# Создаем каталог logs если он не существует
logs_dir = "logs"
if not os.path.exists(logs_dir):
os.makedirs(logs_dir)
print(f"Created logs directory: {logs_dir}")
# Определяем уровень логирования
if getenv("DEBUG", '0') == '1':
log_level = logging.INFO
else:
log_level = logging.WARNING
# Временно включаем детальное логирование для отладки
log_level = logging.INFO
# Создаем основной логгер
logger = logging.getLogger()
logger.setLevel(log_level)
# Очищаем существующие обработчики
logger.handlers.clear()
# Формат логов
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# Настройка файлового логирования с ротацией
file_handler = TimedRotatingFileHandler(
filename=os.path.join(logs_dir, "salvagedb_bot.log"),
when='midnight', # Ротация в полночь
interval=1, # Каждый день
backupCount=30, # Храним 30 дней
encoding='utf-8',
utc=False # Используем локальное время
)
file_handler.setLevel(log_level)
file_handler.setFormatter(formatter)
file_handler.suffix = "%Y-%m-%d" # Формат суффикса для файлов
# Настройка консольного логирования
console_handler = logging.StreamHandler()
console_handler.setLevel(log_level)
console_handler.setFormatter(formatter)
# Добавляем обработчики к логгеру
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# Логируем успешную настройку
logging.info("=== LOGGING SYSTEM INITIALIZED ===")
logging.info(f"Log level: {logging.getLevelName(log_level)}")
logging.info(f"Logs directory: {os.path.abspath(logs_dir)}")
logging.info(f"Log rotation: daily, keeping 30 days")
logging.info("=== LOGGING SETUP COMPLETE ===")
def get_us_state_name(state_code: str) -> str:
"""
Конвертирует двухбуквенный код штата США в полное название
@ -307,13 +370,11 @@ async def send_vehicle_photos(message: Message, vin: str, photo_paths: list, mak
)
if getenv("DEBUG",'0') == '1':
logging.basicConfig(level=logging.INFO)
else:
logging.basicConfig(level=logging.WARNING)
# Настройка системы логирования
setup_logging()
# Временно включаем детальное логирование для отладки
logging.getLogger().setLevel(logging.INFO)
# Логируем информацию о системе
log_system_info()
TOKEN = getenv("BOT_TOKEN")
@ -1541,7 +1602,6 @@ async def process_photo_vin(message: Message, state: FSMContext, db: OracleDatab
async def on_startup():
log_system_info() # Логируем информацию о системе
await oracle_db.connect()
# Регистрируем middleware для всех типов событий
dp.message.middleware(DbSessionMiddleware(oracle_db))