fix(logging): Ensure file logger is correctly initialized

This commit is contained in:
2025-07-20 08:35:40 +03:00
parent ae9c61facc
commit cf52a7c0ad
2 changed files with 24 additions and 22 deletions

View File

@@ -25,6 +25,7 @@ def setup_logging(run_id: str, db_manager: Optional[DatabaseManager] = None):
"""Настраивает систему логирования проекта.""" """Настраивает систему логирования проекта."""
# <CORE_LOGIC> # <CORE_LOGIC>
log_format = '[%(asctime)s] [%(levelname)s] :: %(message)s' log_format = '[%(asctime)s] [%(levelname)s] :: %(message)s'
handlers = []
# <ACTION name="create_log_directory"> # <ACTION name="create_log_directory">
# Создаем директорию для логов, если она не существует. # Создаем директорию для логов, если она не существует.
@@ -34,35 +35,36 @@ def setup_logging(run_id: str, db_manager: Optional[DatabaseManager] = None):
# <ACTION name="configure_file_handler"> # <ACTION name="configure_file_handler">
# Добавляем обработчик для записи логов в файл. # Добавляем обработчик для записи логов в файл.
log_file_name = f"run_{run_id}.log" log_file_name = f"run_{run_id}.log"
file_handler = logging.FileHandler(settings.log_dir / log_file_name) file_handler = logging.FileHandler(settings.log_dir / log_file_name, mode='w', encoding='utf-8')
file_handler.setLevel(logging.INFO) file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter(log_format)) file_handler.setFormatter(logging.Formatter(log_format))
handlers.append(file_handler)
root_logger = logging.getLogger('')
root_logger.addHandler(file_handler)
# </ACTION> # </ACTION>
logging.basicConfig(
level=logging.DEBUG,
format=log_format,
datefmt='%Y-%m-%d %H:%M:%S',
force=True # Перезаписывает любую существующую конфигурацию
)
# <DEPENDENCY name="settings.log_to_db" /> # <DEPENDENCY name="settings.log_to_db" />
if settings.log_to_db and db_manager: if settings.log_to_db and db_manager:
# <ERROR_HANDLER> # <ERROR_HANDLER>
try: try:
root_logger = logging.getLogger('')
db_handler = DatabaseLogHandler(db_manager, run_id) db_handler = DatabaseLogHandler(db_manager, run_id)
db_handler.setLevel(logging.DEBUG) db_handler.setLevel(logging.DEBUG)
db_handler.setFormatter(logging.Formatter(log_format)) db_handler.setFormatter(logging.Formatter(log_format))
root_logger.addHandler(db_handler) handlers.append(db_handler)
logging.info("Обработчик логов для записи в <20><>азу данных успешно добавлен.")
except Exception as e: except Exception as e:
logging.error(f"Не удалось инициализировать обработчик логов для БД: {e}") # Логирование еще не настроено, используем print для этой критической ошибки
print(f"Не удалось инициализировать обработчик логов для БД: {e}")
# </ERROR_HANDLER> # </ERROR_HANDLER>
logging.basicConfig(
level=logging.DEBUG,
format=log_format,
datefmt='%Y-%m-%d %H:%M:%S',
handlers=handlers,
force=True # Перезаписывает любую существующую конфигурацию
)
if any(isinstance(h, DatabaseLogHandler) for h in handlers):
logging.info("Обработчик логов для записи в базу данных успешно добавлен.")
logging.info("Система логирования инициализирована.") logging.info("Система логирования инициализирована.")
# </CORE_LOGIC> # </CORE_LOGIC>
# <COHERENCE_CHECK status="PASSED" /> # <COHERENCE_CHECK status="PASSED" />

View File

@@ -7,8 +7,10 @@
# <IMPORTS> # <IMPORTS>
import sys import sys
import logging import logging
from datetime import datetime
from orchestrator import AppOrchestrator from orchestrator import AppOrchestrator
from core.settings import settings from core.settings import settings
from core.logging_config import setup_logging
# </IMPORTS> # </IMPORTS>
# <CONTRACT for="main"> # <CONTRACT for="main">
@@ -20,17 +22,15 @@ from core.settings import settings
# exceptions: # exceptions:
# - "ValueError: при ошибках в конфигурации." # - "ValueError: при ошибках в конфигурации."
# - "KeyboardInterrupt: при прерывании пользователем." # - "KeyboardInterrupt: при прерывании пользователем."
# - "Exception: при любых других критических ошибках." # - "Exception: при любых других критических ошибка<EFBFBD><EFBFBD>."
# </CONTRACT> # </CONTRACT>
# <ENTRYPOINT name="main"> # <ENTRYPOINT name="main">
def main(): def main():
"""Точка входа в приложение.""" """Точка входа в приложение."""
# <INIT> # <INIT>
logging.basicConfig( run_id = datetime.now().strftime("%Y%m%d-%H%M%S")
level=logging.INFO, setup_logging(run_id=run_id)
format='[%(asctime)s] [%(levelname)s] %(name)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# </INIT> # </INIT>