logging_level/ fix subgroup migrations and more
This commit is contained in:
@@ -6,55 +6,91 @@ from datetime import timedelta
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from config import LOG_ROTATION_TIME
|
||||
import config as cfg
|
||||
|
||||
|
||||
LEVELS = {
|
||||
"critical": 50,
|
||||
"error": 40,
|
||||
"warning": 30,
|
||||
"info": 20,
|
||||
"debug": 10,
|
||||
"notset": 0,
|
||||
}
|
||||
|
||||
PANEL_XUI = "<green>[3x-ui]</green>"
|
||||
PANEL_REMNA = "<blue>[Remnawave]</blue>"
|
||||
CLOGGER = logger.opt(colors=True)
|
||||
|
||||
|
||||
def _lvl(v, default="info"):
|
||||
if isinstance(v, int):
|
||||
return v
|
||||
if isinstance(v, str):
|
||||
for tok in v.replace(",", " ").split():
|
||||
t = tok.strip().lower()
|
||||
if t in LEVELS:
|
||||
return LEVELS[t]
|
||||
return LEVELS[default]
|
||||
|
||||
|
||||
BASE_LEVEL = _lvl(getattr(cfg, "LOGGING_LEVEL", getattr(cfg, "LOG_LEVEL", "info")))
|
||||
LOG_ROTATION_TIME = getattr(cfg, "LOG_ROTATION_TIME", "1 day")
|
||||
|
||||
log_folder = "logs"
|
||||
|
||||
if not os.path.exists(log_folder):
|
||||
os.makedirs(log_folder)
|
||||
os.makedirs(log_folder, exist_ok=True)
|
||||
|
||||
logger.remove()
|
||||
|
||||
level_mapping = {
|
||||
50: "CRITICAL",
|
||||
40: "ERROR",
|
||||
30: "WARNING",
|
||||
20: "INFO",
|
||||
10: "DEBUG",
|
||||
0: "NOTSET",
|
||||
}
|
||||
level_mapping = {50: "CRITICAL", 40: "ERROR", 30: "WARNING", 20: "INFO", 10: "DEBUG", 0: "NOTSET"}
|
||||
|
||||
|
||||
class InterceptHandler(logging.Handler):
|
||||
def emit(self, record):
|
||||
logger_opt = logger.opt(depth=6, exception=record.exc_info)
|
||||
message = record.getMessage()
|
||||
logger_opt.log(level_mapping.get(record.levelno, "INFO"), message)
|
||||
logger.opt(depth=6, exception=record.exc_info).log(
|
||||
level_mapping.get(record.levelno, "INFO"), record.getMessage()
|
||||
)
|
||||
|
||||
|
||||
logging.basicConfig(handlers=[InterceptHandler()], level=0)
|
||||
logging.getLogger("httpcore").setLevel(logging.WARNING)
|
||||
logging.getLogger("httpx").setLevel(logging.WARNING)
|
||||
|
||||
for name in (
|
||||
"httpcore",
|
||||
"httpx",
|
||||
"apscheduler",
|
||||
"apscheduler.executors.default",
|
||||
"apscheduler.scheduler",
|
||||
"async_api_base",
|
||||
"async_api",
|
||||
"async_api_client",
|
||||
):
|
||||
lg = logging.getLogger(name)
|
||||
lg.setLevel(logging.ERROR)
|
||||
lg.propagate = False
|
||||
|
||||
_EXCLUDE = {"async_api_base", "async_api", "async_api_client"}
|
||||
|
||||
|
||||
def _filter(record):
|
||||
return record.get("name") not in _EXCLUDE and record.get("module") not in _EXCLUDE
|
||||
|
||||
|
||||
logger.add(
|
||||
sys.stderr,
|
||||
level="INFO",
|
||||
level=BASE_LEVEL,
|
||||
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level}</level> | <cyan>{module}:{function}:{line}</cyan> | <level>{message}</level>",
|
||||
colorize=True,
|
||||
filter=_filter,
|
||||
)
|
||||
|
||||
log_file_path = os.path.join(log_folder, "logging.log")
|
||||
logger.add(
|
||||
log_file_path,
|
||||
level="DEBUG",
|
||||
level=BASE_LEVEL,
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} | {message}",
|
||||
rotation=LOG_ROTATION_TIME,
|
||||
retention=timedelta(days=3),
|
||||
filter=_filter,
|
||||
)
|
||||
|
||||
logger = logger
|
||||
|
||||
logging.getLogger("apscheduler").setLevel(logging.WARNING)
|
||||
logging.getLogger("apscheduler.executors.default").setLevel(logging.WARNING)
|
||||
logging.getLogger("apscheduler.scheduler").setLevel(logging.WARNING)
|
||||
|
||||
Reference in New Issue
Block a user