логирование

This commit is contained in:
vok1no 2025-10-14 12:41:50 +03:00
parent a6032d595c
commit 1d97d88dad
3 changed files with 99 additions and 7 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
files.*

55
settings/logger.py Normal file
View File

@ -0,0 +1,55 @@
import logging
import functools
import time
FUNC_LEVEL = 15
logging.addLevelName(FUNC_LEVEL, "FUNC")
def func_actions(self, message, *args, **kwargs):
if self.isEnabledFor(FUNC_LEVEL):
self._log(FUNC_LEVEL, message, args, **kwargs)
logging.Logger.func_actions = func_actions
# Создаем основной логгер
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования
# Создаем форматтер
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# Настройка обработчика для всех сообщений
all_file_handler = logging.FileHandler('./files/all.log', encoding='utf-8')
all_file_handler.setLevel(logging.DEBUG) # Записываем все уровни
all_file_handler.setFormatter(formatter)
# Настройка обработчика для ошибок
error_file_handler = logging.FileHandler('./files/error.log', encoding='utf-8')
error_file_handler.setLevel(logging.ERROR) # Записываем только ошибки
error_file_handler.setFormatter(formatter)
# Настройка обработчика для консоли
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
# Добавляем все обработчики к логгеру
logger.addHandler(all_file_handler)
logger.addHandler(error_file_handler)
logger.addHandler(console_handler)
def log_function_call(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logger.func_actions(f"Вызов функции {func.__name__}")
start_time = time.perf_counter()
try:
result = func(*args, **kwargs)
end_time = time.perf_counter()
execution_time_ms = (end_time - start_time) * 1000
logger.func_actions(f"Функция {func.__name__} завершена за {execution_time_ms:.2f} мс")
return result
except Exception as e:
logger.error(f"Ошибка в функции {func.__name__}: {str(e)}")
raise
return wrapper

View File

@ -2,15 +2,42 @@ import os
from dotenv import load_dotenv
import mysql.connector
import json
import functools
from settings.logger import log_function_call, logger
load_dotenv()
mydb = mysql.connector.connect(
try:
mydb = mysql.connector.connect(
host=os.getenv('DB_HOST'),
user=os.getenv('DB_USER'),
password=os.getenv('DB_PW'),
database='vok1no' # Добавьте имя базы данных
)
database='vok1no'
)
except mysql.connector.Error as e:
print(f"Ошибка при подключении к БД: {e}")
mydb = None
@log_function_call
def update_sql_connect():
global mydb # Указываем, что используем глобальную переменную
if mydb is not None:
try:
mydb.close()
except Exception as e:
print(f"Ошибка при закрытии соединения: {e}")
try:
mydb = mysql.connector.connect(
host=os.getenv('DB_HOST'),
user=os.getenv('DB_USER'),
password=os.getenv('DB_PW'),
database='vok1no'
)
except mysql.connector.Error as e:
print(f"Ошибка при переподключении к БД: {e}")
mydb = None
def sql_select(sql, val=None):
try:
@ -83,3 +110,12 @@ try:
print(res)
except SystemError as e:
print(e)
@log_function_call
def test_error():
result = 10 / 0
return result
update_sql_connect()
test_error()