我正在开发一个带有flask的webapp,它作为python库的接口,进行计算(通常很耗时)。在
对服务器的每个调用都用一个标识符标识,我想将对库的调用日志写入一个依赖于给定标识符的文件中。在
一个最小的工作示例如下。在
import time
import logging
logger = logging.getLogger(__name__)
def long_computation(identifier):
logger.info('called computation with identifier %s', identifier)
for i in range(100):
logger.info('in step %d of identifier %s', i, identifier)
time.sleep(1)
logger.info('finished computation with identifier %s')
当我调用服务器时,比如说http://127.0.0.1:5000/node/A
,它会创建日志文件computations-A.log
,并正确地记录到这个文件中。但是,如果我在第一次计算结束之前对服务器进行另一次调用,比如http://127.0.0.1:5000/node/B
,那么它将创建日志文件computations-B.log
,但是这两个计算的日志,对应于对call_computation
的不同调用,都会转到这两个文件。也就是说,两个文件computations-A.log
和computations-B.log
都有如下行:
2018-08-02 20:31:57,524 INFO computations : in step 56 of identifier B
2018-08-02 20:31:57,799 INFO computations : in step 97 of identifier A
有谁能帮我打电话到图书馆去查看适当的日志文件吗?注意,原则上我不能修改进行计算的包,这样我就不能在这个包中创建更多的记录器。在
提前谢谢!在
解决方案是过滤日志记录。在
server.py
文件中,创建logging.Filter
的子类:在设置处理程序时,请添加此类的实例:
^{pr2}$这样,当日志记录到达过滤器时,如果创建日志的线程与创建过滤器的线程相同,那么它将传递到下一级;否则,它将被过滤掉。在
相关问题 更多 >
编程相关推荐