From c48afea820680fec09c756360c525e016de5b3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Fri, 31 Mar 2023 10:30:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/utils/log.py | 37 ++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/backend/dvadmin/utils/log.py b/backend/dvadmin/utils/log.py index e8081f4..9586c64 100644 --- a/backend/dvadmin/utils/log.py +++ b/backend/dvadmin/utils/log.py @@ -1,28 +1,37 @@ import logging import os.path -from logging import LogRecord +import sys -from django.core.servers.basehttp import WSGIRequestHandler +from django.db import connection from loguru import logger from logging.handlers import RotatingFileHandler # 1.🎖️先声明一个类继承logging.Handler(制作一件品如的衣服) -from loguru._defaults import LOGURU_FORMAT + +from application.dispatch import is_tenants_mode -class InterceptTimedRotatingFileHandler(RotatingFileHandler): +class InterceptTimedRotatingFileHandler(RotatingFileHandler, logging.Filter): """ 自定义反射时间回滚日志记录器 缺少命名空间 """ def __init__(self, filename, when='d', interval=1, backupCount=5, encoding="utf-8", delay=False, utc=False, - maxBytes=1024 * 1024 * 100, atTime=None, logging_levels="all"): + maxBytes=1024 * 1024 * 100, atTime=None, logging_levels="all", format=None): super(InterceptTimedRotatingFileHandler, self).__init__(filename) filename = os.path.abspath(filename) + # 定义默认格式 + if not format: + format = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {extra[ip]}:{extra[port]} | {level: <8}| {name}:{function}:{line} - {message}" when = when.lower() # 2.🎖️需要本地用不同的文件名做为不同日志的筛选器 + logger.configure( + handlers=[ + dict(sink=sys.stderr, format=format), + ], + ) self.logger_ = logger.bind(sime=filename, ip="-", port="-", username="张三") self.filename = filename key_map = { @@ -74,7 +83,7 @@ class InterceptTimedRotatingFileHandler(RotatingFileHandler): # self.logger_.remove(file_key[filename_fmt_key]) self.logger_.add( filename_fmt, - # format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {extra[ip]}:{extra[port]} | {level: <8}| {name}:{function}:{line} - {message}", + format=format, retention=retention, encoding=encoding, level=self.level, @@ -100,13 +109,17 @@ class InterceptTimedRotatingFileHandler(RotatingFileHandler): # 设置自定义属性 port = "-" ip = "-" - locals_self = frame.f_locals.get('self', None) + details = frame.f_locals.get('details', None) msg = self.format(record) - if locals_self and hasattr(locals_self, 'client_address'): - ip, port = locals_self.client_address - # - 127.0.0.1:56525 - - msg = f"{ip}:{port} - {msg}" + bind = {} + if details and details.get('client'): + ip, port = details.get('client').split(':') + if is_tenants_mode(): + bind["schema_name"] = connection.tenant.schema_name + bind["domain_url"] = getattr(connection.tenant, 'domain_url', None) + bind["ip"] = ip + bind["port"] = port self.logger_ \ .opt(depth=depth, exception=record.exc_info, colors=True) \ - .bind(ip=ip, port=port) \ + .bind(**bind) \ .log(level, msg)