使用 Flask 时,如何优雅的输出日志

1 篇文章 0 订阅
1 篇文章 0 订阅

Flask logging

简述,细节展示不清楚的地方多看一下python的logging模块

留言交流(需FQ)可以移步http://dr-von.top/

使用 Flask 时,如何优雅的输出日志。这些日志也许需要特定的格式,更丰富的信息,或者添加一些上下文的信息(如当前登录的用户名)等等。

根据官方文档来看,当想要为项目配置日志时,应当在程序启动时尽早进行配置。比如在flask_app = Flask(‘api-controller’)之前配置。
如果不配置,flask 会create_logger

flask source code 中是这样的

default_handler = logging.StreamHandler(wsgi_errors_stream)
default_handler.setFormatter(
    logging.Formatter("[%(asctime)s] %(levelname)s in %(module)s: %(message)s")
)

所以使用缺省配置时

如果在操作 app.logger 之后配置日志,并且需要 移除缺省的日志记录器,可以导入并移除它:

from flask.logging import default_handler

flask_app.logger.removeHandler(default_handler)

实际上,在设置完 basicConfig 后也可以通过下面方式修改。这段代码的影响是**在所有日志后面增加一个上下文参数(当前登录的用户名)

from flask import g
username = g.user.name
root = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)-8s %(message)s' + f" User: {username}")
handler.setFormatter(formatter)
root.handlers = [handler]

应用程序代码可以在一个模块中定义和配置父记录器,并在单独的模块中创建(但不配置)子记录器,并且对子记录器的所有调用都将传递给父记录器。

比如上面的 logging.getLogger() # 同 logging.getLogger(‘’) 其实就是获取了 root logger 并作修改。
上述代码写在 @app.before_request函数中,会对所有的日志输出有影响; 如果写在@app.after_request函数中,只会影响werkzeug的日志输出。 比如在flask应用中我们的目录为app

# create logger with app and config it
logging.getLogger("app").setLevel(log_level)

那么所有的 app.* 文件下的 logger 都会这个父记录器的影响。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值