sales-assistant-py-new/app/core/log.py
2026-06-15 12:21:44 +08:00

69 lines
1.7 KiB
Python

import asyncio
import sys
from pathlib import Path
from loguru import logger
from app.conf.app_config import app_config
from app.core.context import request_id_ctx_var
log_format = (
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <8}</level> | "
"<magenta>request_id - {extra[request_id]}</magenta> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
"<level>{message}</level>"
)
def inject_request_id(record):
request_id = request_id_ctx_var.get()
record["extra"]["request_id"] = request_id
logger.remove()
logger = logger.patch(inject_request_id)
if app_config.logging.console.enable:
logger.add(sink=sys.stdout, level=app_config.logging.console.level, format=log_format)
if app_config.logging.file.enable:
path = Path(app_config.logging.file.path)
path.mkdir(parents=True, exist_ok=True)
logger.add(
sink=path / "app.log",
level=app_config.logging.file.level,
format=log_format,
rotation=app_config.logging.file.rotation,
retention=app_config.logging.file.retention,
encoding="utf-8"
)
if __name__ == '__main__':
async def graph(request: str):
# 打印日志
logger.info(request)
async def test1():
# 接收到请求
request_id_ctx_var.set("request-1")
# 模拟处理
await asyncio.sleep(1)
await graph("request-1")
async def test2():
# 接收到请求
request_id_ctx_var.set("request-2")
# 模拟处理
await asyncio.sleep(1)
await graph("request-2")
async def main():
await asyncio.gather(test1(), test2())
asyncio.run(main())