问题过程
- 使用Github搜索,没有找到方法。
- 在官方文档中查找,并进行搜索。没有找到内容。
- google & 百度,都没有找到任何信息。
- 在bleepcoder中找到类似的问题,测试ok 👉问题链接
解决过程
此方法需要用到loguru
模块,没有安装的小伙伴请 pip install loguru
废话不多说,直接开始操作
创建配置文件
为了方便配置,创建一个配置文件来储存需要用到的参数,觉得没必要的话可以直接跳过这一步使用参数。
这里的的日志文件会按照创建时的日期生成文件名。
import os
import time
# -----------------------系统调试------------------------------------
DEBUG = True
# -----------------------日志-----------------------------------------
LOG_DIR = os.path.join(os.getcwd(), f'application\log\{time.strftime("%Y-%m-%d")}.log')
LOG_FORMAT = '<level>{level: <8}</level> <green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> - <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>'
创建拓展文件
原方法为了方便演示将所有代码集成到了一个main之中,我们将部分内容拆开单独形成文件,避免主程序过于臃肿,也便于修改和调试。
此文件定义了日志处理方法
创建一个cusotm_log.py
内容如下,这里导入了一个config模块,大家如果没有的话可以直接使用参数
import logging
from loguru import logger
from ..config import config
from loguru._defaults import LOGURU_FORMAT
class InterceptHandler(logging.Handler):
def emit(self, record):
# Get corresponding Loguru level if it exists
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# Find caller from where originated the logged message
frame, depth = logging.currentframe(), 2
while frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
depth += 1
logger.opt(depth=depth, exception=record.exc_info).log(
level, record.getMessage()
)
def format_record(record: dict) -> str:
format_string = config.LOG_FORMAT
if record["extra"].get("payload") is not None:
record["extra"]["payload"] = pformat(
record["extra"]<