aiologger 异步日志 Python

1,528 阅读1分钟

介绍

这是我的python3.8+tornado6.1项目中的代码片段,记录python的异步日志第三方库aiologger的用法,需要aiofiles支持,结合pathlib、asyncio食用。

代码

# coding: utf8
"""
日志
"""

import asyncio
import logging
from aiologger import Logger
from aiologger.formatters.base import Formatter
from aiologger.handlers.files import AsyncTimedRotatingFileHandler
from pathlib import Path

BASE_DIR = Path().cwd()


def get_logger(name: str = "log") -> Logger:
    """异步日志,按日期切割"""
    logger: Logger = Logger(name="log_sys", level=logging.DEBUG)
    logfile_path = Path(BASE_DIR, "logs", f"{name}.log")
    logfile_path.parent.mkdir(parents=True, exist_ok=True)
    logfile_path.touch(exist_ok=True)
    atr_file_handler = AsyncTimedRotatingFileHandler(
        filename=str(logfile_path),
        interval=1,
        backup_count=30,
        encoding="utf8"
    )
    formatter = Formatter(
        "%(asctime)s | %(levelname)s | %(filename)s:%(lineno)d | %(message)s")
    atr_file_handler.formatter = formatter
    logger.add_handler(atr_file_handler)
    return logger


log_sys: Logger = get_logger("system")
log_si: Logger = get_logger("interface")


async def start(msg: str):
    """启动日志"""
    await log_sys.info(msg)


async def shutdown():
    """停掉日志"""
    await log_sys.shutdown()
    await log_si.shutdown()
    
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(log.start("服务启动成功"))
    loop.run_until_complete(log.shutdown())