如何从Flask的日志记录中删除“- -”?

11

当我运行Flask 0.9时,我得到了以下日志记录:

127.0.0.1 - - [30/Mar/2016 10:08:38] "GET / HTTP/1.1" 200 -
  1. 我该怎么做才能够移除127.0.0.1[30/Mar/2006 10:08:38]之间的- -?

  2. 如果我想要从日志消息中移除响应代码200,我该怎么做?

感谢任何建议!

正如@alecxe所建议的那样,我列出了与记录相关的代码片段:

logging.basicConfig(filename='werkzeug.log', level=logging.INFO)
logger = logging.getLogger('werkzeug')
logger.setLevel(logging.INFO)

你在应用程序中设置了日志记录吗?你的 main.py 应用程序入口文件中有什么? - alecxe
相关线程:https://dev59.com/HWMm5IYBdhLWcg3wRdUz. - alecxe
@alecxe 我更新了我的问题。看起来,你提供的线程不能解决我的问题,例如没有 remote_addr,我不知道应该使用哪个变量来代替 remote_addr - abelard2008
1个回答

16

您可以创建werkzeug.serving.WSGIRequestHandler的子类来覆盖您不喜欢的行为:

import logging
from flask import Flask
from werkzeug.serving import WSGIRequestHandler, _log

app = Flask(__name__)

@app.route('/hello')
def hello():
    return '<html><body><p>Hello, World.</p></body></html>'

class MyRequestHandler(WSGIRequestHandler):
    # Just like WSGIRequestHandler, but without "- -"
    def log(self, type, message, *args):
        _log(type, '%s [%s] %s\n' % (self.address_string(),
                                         self.log_date_time_string(),
                                         message % args))

    # Just like WSGIRequestHandler, but without "code"
    def log_request(self, code='-', size='-'):
        self.log('info', '"%s" %s', self.requestline, size)

if __name__=="__main__":
    logging.basicConfig(filename='werkzeug.log', level=logging.INFO)
    logger = logging.getLogger('werkzeug')
    logger.setLevel(logging.INFO)
    app.run(debug=True, request_handler=MyRequestHandler)

生成的日志文件:

INFO:werkzeug: * Running on http://127.0.0.1:5000/
INFO:werkzeug: * Restarting with reloader
INFO:werkzeug:127.0.0.1 [30/Mar/2016 02:28:24] "GET /?foo HTTP/1.1" -
INFO:werkzeug:127.0.0.1 [30/Mar/2016 02:28:28] "GET /hello HTTP/1.1" -

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