【问题标题】:Flask block specific endpoints from loggingFlask 阻止特定端点的日志记录
【发布时间】:2020-05-25 10:52:54
【问题描述】:

我在我的烧瓶应用程序中有一些带有散景的 ajax 调用,为了获取其数据,散景图每秒执行一个 POST 请求到某个端点,现在我不断得到这样的输出:

127.0.0.1 - - [25/May/2020 12:50:17] "POST /statusdata/ HTTP/1.1" 200 -
127.0.0.1 - - [25/May/2020 12:50:17] "POST /statusdata/ HTTP/1.1" 200 -
127.0.0.1 - - [25/May/2020 12:50:19] "POST /statusdata/ HTTP/1.1" 200 -
127.0.0.1 - - [25/May/2020 12:50:19] "POST /statusdata/ HTTP/1.1" 200 -

如何从flask的调试日志中排除路由/statusdata/? 谢谢帮忙!

【问题讨论】:

    标签: python flask logging


    【解决方案1】:

    您可以向记录器添加自定义过滤器以查找路由名称。如果您只是使用开发服务器,这将是 werkzeug 处理程序。当您转向生产时,您必须找到特定的处理程序。一个完整的示例(您可以在浏览器控制台中进行监控,以确认表单已提交,尽管服务器上没有显示记录):

    from flask import Flask, render_template_string
    import logging
    
    
    class AjaxFilter(logging.Filter):
        def filter(self, record):  
            return "statusdata" not in record.getMessage()
    
    log = logging.getLogger('werkzeug')
    log.addFilter(AjaxFilter())
    
    
    home_template = """
    <form method="post" action="{{ url_for('route_a') }}" class="testAjax">
    <input type="submit" value="submit A">
    </form>
    
    <form method="post" action="{{ url_for('statusdata') }}" class="testAjax">
    <input type="submit" value="submit B">
    </form>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
       $(".testAjax").submit(function(e) {
           e.preventDefault();
           var form = $(this);
           var url = form.attr('action');
    
           $.ajax({
               type: "POST",
               url: url,
               data: form.serialize(),
               context: form,
               success: function(resp) {
                   console.log(resp);   
               }
           });
       });
    </script>
    """
    
    app = Flask('__name__')
    
    
    @app.route('/')
    def home():
        return render_template_string(home_template)
    
    @app.route('/a', methods=['POST'])
    def route_a():
        return "1"
    
    @app.route('/statusdata/', methods=['POST'])
    def statusdata():
        return "2"
    
    if __name__ == '__main__':
        app.run()
    

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多