логирование
This commit is contained in:
parent
a6032d595c
commit
1d97d88dad
|
|
@ -0,0 +1 @@
|
|||
files.*
|
||||
|
|
@ -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
|
||||
50
utils.py
50
utils.py
|
|
@ -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(
|
||||
host=os.getenv('DB_HOST'),
|
||||
user=os.getenv('DB_USER'),
|
||||
password=os.getenv('DB_PW'),
|
||||
database='vok1no' # Добавьте имя базы данных
|
||||
)
|
||||
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
|
||||
|
||||
@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:
|
||||
|
|
@ -82,4 +109,13 @@ try:
|
|||
res = sql_select('SELECT * FROM sites_logs')
|
||||
print(res)
|
||||
except SystemError as e:
|
||||
print(e)
|
||||
print(e)
|
||||
|
||||
|
||||
@log_function_call
|
||||
def test_error():
|
||||
result = 10 / 0
|
||||
return result
|
||||
|
||||
update_sql_connect()
|
||||
test_error()
|
||||
Loading…
Reference in New Issue