代码之家  ›  专栏  ›  技术社区  ›  river7816

为什么spdlog不在async函数中打印

  •  0
  • river7816  · 技术社区  · 7 月前
    import asyncio
    from pathlib import Path
    import spdlog as spd
    import asyncio
    import logging
    
    async def A():
        asyncio.create_task(B())
        while True:
            await asyncio.sleep(1)
    
    async def B():
        logger = spd.DailyLogger(name = 'B', filename = 'B.log', hour = 0, minute = 0, async_mode=True)
        logger.set_level(spd.LogLevel.INFO)
        # logging.basicConfig(level=logging.INFO, filename='B.log', filemode='w')
        # logger = logging.getLogger('B')
        while True:
            logger.info('B')
            await asyncio.sleep(1)
    
    
    if __name__ == "__main__":
        asyncio.run(A())
    

    首先,我创建了一个任务 B 里面 A ,它打印一行 B 每一秒。当我使用Python的默认日志记录时,一切正常,但使用C++的spdlog,无论我是否启用,都没有输出 async_mode 或者不。

    我试图禁用 异步模式 ,还是一样

    1 回复  |  直到 7 月前
        1
  •  3
  •   chris_se    7 月前

    默认情况下,spdlog不会刷新INFO消息,这就是为什么您什么都看不到。当收到足够的消息时,它将刷新(长时间运行程序或将睡眠间隔更改为 0.01 看到这种效果),或 periodically (尽管spdlog的Python包装器似乎不支持更改此设置),或者如果您更改了设置,它应该刷新哪些类型的消息:

    logger.flush_on(spd.LogLevel.INFO)
    

    (紧接着 .set_level() 呼叫。)