Files
drf-rack/net/xeaf/rack/utils/settings/configs/logging.py

129 lines
3.4 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Параметры конфигурации системы журналирования
"""
from net.xeaf.rack.utils.settings import Environment
from net.xeaf.rack.utils.settings import SettingUtils
from net.xeaf.rack.utils.settings.logger import LogDebugFilter
#
# Имя журнала
#
LOGGER_NAME = Environment.get_str("LOGGER_NAME", "rack")
#
# Ключи полей, которые необходимо скрывать в журнале
#
LOGGER_SENSITIVE_KEYS = Environment.get_str_as_list("LOGGER_SENSITIVE_KEYS", "")
#
# Уровень журналирования
#
LOG_LEVEL = Environment.get_str("LOG_LEVEL")
if SettingUtils.is_debug_mode():
LOG_LEVEL = "DEBUG"
else:
if LOG_LEVEL == "DEBUG":
LOG_LEVEL = "INFO"
#
# Файлы журналов
#
LOG_FILE = Environment.get_str_as_file("LOG_FILE")
DEBUG_LOG_FILE = Environment.get_str_as_file("DEBUG_LOG_FILE")
#
# Настройка журнала
#
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"filters": {
"strict_debug_only": {
"()": LogDebugFilter,
},
},
"formatters": {
"custom_format": {
"format": "\n{asctime} [{levelname}] {message}",
"datefmt": "%Y-%m-%d %H:%M:%S",
"style": "{",
},
},
"handlers": {
#
# Основной лог
#
"main_file": {
"level": "INFO" if LOG_LEVEL == "DEBUG" else LOG_LEVEL,
"class": "concurrent_log_handler.ConcurrentRotatingFileHandler",
"filename": LOG_FILE,
"maxBytes": 1024 * 1024 * 10,
"backupCount": 5,
"formatter": "custom_format",
"encoding": "utf-8",
},
#
# Лог отладки
#
"debug_file": {
"level": "DEBUG",
"class": "concurrent_log_handler.ConcurrentRotatingFileHandler",
"filename": DEBUG_LOG_FILE,
"maxBytes": 1024 * 1024 * 10,
"backupCount": 5,
"formatter": "custom_format",
"filters": [] if SettingUtils.is_debug_mode() else ["strict_debug_only"],
"encoding": "utf-8",
},
},
#
# Журналы
#
"loggers": {
# Журнал системы
LOGGER_NAME: {
"handlers": ["main_file", "debug_file"],
"level": "DEBUG",
"propagate": False,
},
# Стандартный журнал
"django": {
# "handlers": ["main_file", "debug_file"],
# Отключаем полностью
"'handlers": [],
"level": "ERROR",
"propagate": False,
},
#
# Отрезаем вообще всё, кроме реальных падений ядра (500 ошибок вне DRF)
#
"django.request": {
"level": "ERROR",
"propagate": True,
},
#
# Глушим системный спам сторонних библиотек
#
"urllib3": {"level": "WARNING"},
"botocore": {"level": "WARNING"},
"boto3": {"level": "WARNING"},
},
}