From ba260ada6dfad47cf8c8751307586cd140a28141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Sat, 1 Apr 2023 12:01:12 +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 | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/backend/dvadmin/utils/log.py b/backend/dvadmin/utils/log.py index 9586c64..47efd6b 100644 --- a/backend/dvadmin/utils/log.py +++ b/backend/dvadmin/utils/log.py @@ -12,7 +12,7 @@ from logging.handlers import RotatingFileHandler from application.dispatch import is_tenants_mode -class InterceptTimedRotatingFileHandler(RotatingFileHandler, logging.Filter): +class InterceptTimedRotatingFileHandler(RotatingFileHandler): """ 自定义反射时间回滚日志记录器 缺少命名空间 @@ -24,7 +24,7 @@ class InterceptTimedRotatingFileHandler(RotatingFileHandler, logging.Filter): 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}" + format = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {extra[client_addr]:^18} | {level: <8}| {name}:{function}:{line} - {message}" when = when.lower() # 2.🎖️需要本地用不同的文件名做为不同日志的筛选器 logger.configure( @@ -32,7 +32,7 @@ class InterceptTimedRotatingFileHandler(RotatingFileHandler, logging.Filter): dict(sink=sys.stderr, format=format), ], ) - self.logger_ = logger.bind(sime=filename, ip="-", port="-", username="张三") + self.logger_ = logger.bind(sime=filename, client_addr="-") self.filename = filename key_map = { 'h': 'hour', @@ -107,19 +107,26 @@ class InterceptTimedRotatingFileHandler(RotatingFileHandler, logging.Filter): frame = frame.f_back depth += 1 # 设置自定义属性 - port = "-" - ip = "-" details = frame.f_locals.get('details', None) msg = self.format(record) bind = {} - if details and details.get('client'): - ip, port = details.get('client').split(':') + record_client = None + if isinstance(record.args, dict): + record_client = record.args.get('client_addr') or record.args.get('client') + elif isinstance(record.args, tuple) and len(record.args) > 0: + if ":" in str(record.args[0]): + record_client = record.args[0] + msg = f"{msg.split('-')[1].strip(' ')}" + elif isinstance(record.args[0], tuple) and len(record.args[0]) == 2: + record_client = f"{record.args[0][0]}:{record.args[0][1]}" + msg = f"{msg.split('-')[1].strip(' ')}" + client = record_client or (details and details.get('client')) + if client: + bind["client_addr"] = client 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) \ + .opt(depth=depth, exception=record.exc_info, colors=True, lazy=True) \ .bind(**bind) \ .log(level, msg)