创建多个logger,每个对应一个线程池
时间: 2023-06-17 22:06:44 浏览: 46
在多线程应用程序中,为每个线程池创建一个单独的 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)。每个日志文件都只包含对应线程的日志记录,这样可以方便地对每个线程的日志进行调试和分析。