flask应用程序的日志记录

2024-05-29 02:15:54 发布

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

我正在开发一个带有flask的webapp,它作为python库的接口,进行计算(通常很耗时)。在

对服务器的每个调用都用一个标识符标识,我想将对库的调用日志写入一个依赖于给定标识符的文件中。在

一个最小的工作示例如下。在

在计算.py在

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')

在服务器.py在

^{pr2}$

当我调用服务器时,比如说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.logcomputations-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

有谁能帮我打电话到图书馆去查看适当的日志文件吗?注意,原则上我不能修改进行计算的包,这样我就不能在这个包中创建更多的记录器。在

提前谢谢!在


Tags: 文件ofinpyimportinfo服务器log
1条回答
网友
1楼 · 发布于 2024-05-29 02:15:54

解决方案是过滤日志记录。在server.py文件中,创建logging.Filter的子类:

class MyFilter(logging.Filter):
    def __init__(self, thread_id):
        super(MyFilter, self).__init__()
        self.thread_id = thread_id

    def filter(self, record):
        return record.thread == self.thread_id

在设置处理程序时,请添加此类的实例:

^{pr2}$

这样,当日志记录到达过滤器时,如果创建日志的线程与创建过滤器的线程相同,那么它将传递到下一级;否则,它将被过滤掉。在

相关问题 更多 >

    热门问题