效果:
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] | 这是一个报错日志