我在多个线程(logging)中为concurrent使用pythons日志记录实用程序。与许多本示例(cookbook,another 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()
我知道我可以传递记录器实例或其名称,但这将需要我使通用软件包更加具体。我可以更改通用包以适应更好的日志记录原理,但是不想让它期望我的线程业务。
也许有可能更改要求新记录器的记录器?