Добавлена функция настройки логирования с ротацией файлов в 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 from datetime import datetime
import platform import platform
import os import os
from logging.handlers import TimedRotatingFileHandler
from aiogram import Bot, Dispatcher from aiogram import Bot, Dispatcher
from aiogram.filters import Command from aiogram.filters import Command
@ -15,6 +16,68 @@ from db import OracleDatabase
from middlewares.db import DbSessionMiddleware 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: 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) setup_logging()
else:
logging.basicConfig(level=logging.WARNING)
# Временно включаем детальное логирование для отладки # Логируем информацию о системе
logging.getLogger().setLevel(logging.INFO) log_system_info()
TOKEN = getenv("BOT_TOKEN") TOKEN = getenv("BOT_TOKEN")
@ -1541,7 +1602,6 @@ async def process_photo_vin(message: Message, state: FSMContext, db: OracleDatab
async def on_startup(): async def on_startup():
log_system_info() # Логируем информацию о системе
await oracle_db.connect() await oracle_db.connect()
# Регистрируем middleware для всех типов событий # Регистрируем middleware для всех типов событий
dp.message.middleware(DbSessionMiddleware(oracle_db)) dp.message.middleware(DbSessionMiddleware(oracle_db))