python 日志模块配置,支持trace id

279 阅读1分钟

效果:

image.png

from loguru import logger
import sys
import os

def setup_logger():
    # logger_format = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - [{extra[trace]}] | {message}"
    logger_format = (
        "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
        "<level>{level: <8}</level> | "
        "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
        "[<light-blue>{extra[trace]}</light-blue>] | "
        "<level>{message}</level>"
    )

    # 直接绑定 trace 而不重新赋值给 logger
    bound_logger = logger.bind(trace="")

    bound_logger.configure(handlers=[{"sink": sys.stdout, "format": logger_format}])

    # from app.settings.configs import APP_NAME
    # log_name = f'{APP_NAME.lower()}.log'

    # 配置文件和环境变量
    # from app.settings.configs import configs
    # from app.settings.environment import ENV

    # 确定日志文件路径
    # log_path = os.path.join('/data/log' if configs.ENV == ENV.PROD.value else '.', log_name)

    # 确保日志目录存在
    # if not os.path.exists(os.path.dirname(log_path)):
    #     os.makedirs(os.path.dirname(log_path), exist_ok=True)

    # try:
        # 配置Loguru日志输出到文件
        # bound_logger.add(log_path, rotation="500 MB", retention=3, level="INFO", format=logger_format)
    # except Exception as e:
        # bound_logger.error(f"Error configuring logging: {e}")

    return bound_logger


log = setup_logger()
import uuid
uuid = str(uuid.uuid4())
log.bind(trace=uuid).info("这是一条带有trace的信息日志")
2024-02-19 09:29:57.655 | INFO     | __main__:<module>:3 - [2dfe27db-0f07-411a-b90b-8ec5be4d3eb2] | 这是一条带有trace的信息日志
log.info("这是一个普通日志")
2024-02-19 09:30:16.760 | INFO     | __main__:<module>:1 - [] | 这是一个普通日志
log.bind(trace=uuid).error("这是一个报错日志")
2024-02-19 09:30:40.612 | ERROR    | __main__:<module>:1 - [2dfe27db-0f07-411a-b90b-8ec5be4d3eb2] | 这是一个报错日志