56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
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
|