python loguru 创建多个logger对象,写入不同文件

该代码示例展示了如何使用loguru库创建过滤器,分别将来自不同logger(a和b)的消息写入不同的日志文件。通过绑定额外的name属性,logger_a和logger_b被用来发送c和d的日志消息,但只会将a和b的消息写入相应的日志文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from loguru import logger

# Only write messages from "a" logger
logger.add("a.log", filter=lambda record: record["extra"].get("name") == "a")
# Only write messages from "b" logger
logger.add("b.log", filter=lambda record: record["extra"].get("name") == "b")

logger_a = logger.bind(name="c")
logger_b = logger.bind(name="d")

logger_a.info("Message A")
logger_b.info("Message B")
在多线程应用程序中,为每个线程池创建一个单独的 logger 是一个很好的实践。这样做可以使日志记录更加清晰并且方便调试。 下面是一个示例代码,演示如何为每个线程池创建一个 logger: ```python import logging import threading import concurrent.futures def thread_function(name): # 创建一个 logger 对象,使用线程名作为 logger 的名称 logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh = logging.FileHandler(f'{name}.log') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) logger.addHandler(fh) logger.debug(f'{name} thread started') # 线程的具体操作 logger.debug(f'{name} thread finished') if __name__ == "__main__": # 创建两个线程池,每个线程池有两个线程 pool1 = concurrent.futures.ThreadPoolExecutor(max_workers=2) pool2 = concurrent.futures.ThreadPoolExecutor(max_workers=2) # 启动线程 pool1.submit(thread_function, 'Thread 1 in Pool 1') pool1.submit(thread_function, 'Thread 2 in Pool 1') pool2.submit(thread_function, 'Thread 1 in Pool 2') pool2.submit(thread_function, 'Thread 2 in Pool 2') ``` 在上面的代码中,我们使用 `logging.getLogger(name)` 为每个线程池创建了一个 logger 对象。在 logger 对象中,我们可以设置日志级别,日志格式,以及添加处理程序(例如文件处理程序)。在 `thread_function` 函数中,我们使用 logger 对象记录线程的开始和结束。 当我们运行这段代码时,将会创建四个不同的日志文件,分别对应四个线程(Thread 1 in Pool 1.log, Thread 2 in Pool 1.log, Thread 1 in Pool 2.log, Thread 2 in Pool 2.log)。每个日志文件都只包含对应线程的日志记录,这样可以方便地对每个线程的日志进行调试和分析。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值