针对特定方法/API/URL静默CherryPy访问日志

4
问题很简单,我们希望CherryPy不记录被调用的特定公开方法/API的访问日志。
基本上,当调用此API时,URL的查询字符串中有一些非常敏感的参数,如果泄露,将会暴露潜在的安全问题。自然地,这是一个/GET请求,并且不幸的是它是传递参数的唯一方式,因为它是从外部服务重定向(302)到此Web服务器。
如果不记录URL,那也能达到目的。
那么,我们是否可以通过API、URL等过滤访问日志中的日志消息呢?
感谢您的帮助。
1个回答

7

默认情况下,CherryPy采用Python标准的logging模块,因此您只需要添加一个自定义过滤器即可。以下示例将忽略任何以/foo作为路径前缀的GET请求:

import logging

class IgnoreURLFilter(logging.Filter):
    # simple example of log message filtering

    def __init__(self, ignore):
        self.ignore = 'GET /' + ignore

    def filter(self, record):
        return self.ignore not in record.getMessage()

app = cherrypy.tree.mount( YourApplication() )
app.log.access_log.addFilter( IgnoreURLFilter('foo') )
cherrypy.engine.start()

可以与https://pypi.org/project/apachelogs一起使用。 - evandrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接