如何过滤古尼康的原木?

发布于 2021-01-29 16:51:52

我有一个带有gunicorn的Flask API。Gunicorn将所有请求记录到我的API中,即

172.17.0.1 - - [19/Sep/2018:13:50:58 +0000] "GET /api/v1/myview HTTP/1.1" 200 16 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

但是,我想过滤日志以排除某个端点,该端点在几秒钟内都从其他服务调用。

我写了一个过滤器来排除此端点:

class NoReadyFilter(logging.Filter):
    def filter(self, record):
        return record.getMessage().find('/api/v1/ready') == -1

并且如果我将此过滤器添加到werkzeug记录器并使用Flask开发服务器,则该过滤器将起作用。请求/api/v1/ready不会出现在日志文件中。但是,我似乎无法将过滤器添加到gunicorn记录器。使用以下代码,请求/api/v1/ready仍然出现:

if __name__ != '__main__':
    gunicorn_logger = logging.getLogger('gunicorn.glogging.Logger')
    gunicorn_logger.setLevel(logging.INFO)
    gunicorn_logger.addFilter(NoReadyFilter())

如何为gunicorn记录器添加过滤器?我尝试gunicorn.error按照此处的建议将其添加到-logger中,但没有帮助。

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我终于找到了一种创建子类的方法

    class CustomGunicornLogger(glogging.Logger):
    
        def setup(self, cfg):
            super().setup(cfg)
    
            # Add filters to Gunicorn logger
            logger = logging.getLogger("gunicorn.access") 
            logger.addFilter(NoReadyFilter())
    

    从继承guncorn.glogging.Logger。然后,您可以提供此类作为参数gunicorn,例如

    gunicorn --logger-class "myproject.CustomGunicornLogger" app
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看