"""
日志
"""
import logging
import uuid
from functools import wraps
from flask import request
def get_request_id() -> str:
"""
获取request_id,如果没有使用uuid
"""
req_id = request.headers.get("Request-Id")
request_id = req_id if req_id else str(uuid.uuid1())
return request_id.replace("-", "").replace("_", "")
def add_request_id(func):
"""
日志中输出额外参数字段request_id
"""
@wraps(func)
def wrapper(msg, *args, **kwargs):
"""
添加extra
"""
kwargs["extra"] = {
"request_id": get_request_id(),
}
func(msg, *args, **kwargs)
return wrapper
class Logger:
"""
自定义日志处理, 往日志中输出额外参数字段(这里为request id)
"""
def __init__(self, name=None):
"""
初始化日志
"""
self.logger = logging.getLogger(name)
def setLevel(self, log_level):
"""
设置日志级别
"""
self.logger.setLevel(log_level)
def addHandler(self, handler):
"""
添加handler
"""
self.logger.addHandler(handler)
@add_request_id
def debug(self, msg, *args, **kwargs):
"""
debug
"""
self.logger.debug(msg, *args, **kwargs)
@add_request_id
def info(self, msg, *args, **kwargs):
"""
info
"""
self.logger.info(msg, *args, **kwargs)
@add_request_id
def warn(self, msg, *args, **kwargs):
"""
warning
"""
self.logger.warning(msg, *args, **kwargs)
@add_request_id
def error(self, msg, *args, **kwargs):
"""
warning
"""
self.logger.error(msg, *args, **kwargs)
def logger(log_level):
logger = Logger("AILogger")
logger.setLevel(log_level=log_level)
sh = logging.StreamHandler()
formatter = logging.Formatter(
fmt="[%(request_id)s]: %(asctime)s: %(levelname)s: [%(filename)s: %(lineno)d]: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
sh.setFormatter(formatter)
logger.addHandler(sh)
return logger
网友评论