更改请求时将获得的记录器

2024-10-01 17:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在多线程(concurrent)中为logging使用pythons日志实用程序。与此(cookbookanother so question)上的许多示例不同,我希望每个线程都记录到自己的文件中(将线程日志分开)。通过为每个记录器使用一个单独的FileHandler(并为每个线程显式地获取一个命名记录器),这可以很好地工作,如下面的示例所示

现在问题出现了,我想从每个线程中调用更多的通用包,也可以从代码中生成自己日志的其他地方调用。我如何确保他们的日志被捕获到属于调用它的线程的文件中

import logging
import concurrent.futures

def generic_function(xyz):
    logger = logging.getLogger(__name__)
    logger.info("Very generic stuff")

def do_work(i):
    logger = logging.getLogger(f'logger{i}')
    logger.setLevel(logging.INFO)
    fh = logging.FileHandler(f'logging_{i}.log')
    logger.addHandler(fh)

    logger.info(f"BeeBaaBoo {i}")
    generic_function(123)

    return 

outps = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    for i in range(10):
        outp = executor.submit(do_work, i)
        outps.append(outp)

for outp in outps:
    if outp.exception() is not None:
        raise outp.exception()

我知道我可以传递logger实例或其名称,但这需要我使通用包更加具体。我可以更改通用包以适应更好的日志记录原则,但不想要求它期望我的线程业务

也许有可能改变一个人在要求一个新的记录器时得到的记录器


Tags: 文件import示例loggingdef记录logger线程

热门问题