加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在 Django 中使用 logging

发布时间:2020-12-15 17:14:46 所属栏目:大数据 来源:网络整理
导读:在 Django 中使用 logging logging 模块简介 logging 是 python 标准库中的模块,用于记录 log。 主要包括以下四个组件: Loggers 向应用程序提供log接口 Handlers 将log记录发送到指定的目的地(控制台输出,或写入文件或发向网络等等) Filters 提供一个分

在 Django 中使用 logging

logging 模块简介

logging 是 python 标准库中的模块,用于记录 log。

主要包括以下四个组件:

  • Loggers 向应用程序提供log接口

  • Handlers 将log记录发送到指定的目的地(控制台输出,或写入文件或发向网络等等)

  • Filters 提供一个分级策略控制 log 输出等级

  • Formatters 指定输出的最终格式。

下面是 Python 官方文档提供的log流程图

用户程序通过一个Logger类的实例写log,可以通过如下方法获取:

logger?=?logging.getLogger(__name__)

Logger 类实例有一个层级表示的名字,如果不指定,就是根层级,也就是 root,后面可以使用点号分隔的方式来定义自己的log层级。

在D jango 中使用

Django 中使用 logging 模块记录log,除了Pythong文档中提到的配置方法外,也可以在 Django 中使用 Django 提供的配制方法。就是在 settings 中通过变量 LOGGING,LOGGING 是一个字典,典型的配置如下:

LOGGING?=?{
????'version':?1,????'disable_existing_loggers':?False,????'formatters':?{
????????'verbose':?{
????????????'format':?'%(levelname)s?%(asctime)s?%(module)s?%(process)d?%(thread)d?%(message)s'
????????},????????'simple':?{
????????????'format':?'%(levelname)s?%(message)s'
????????},????},????'filters':?{
????????'special':?{
????????????'()':?'project.logging.SpecialFilter',????????????'foo':?'bar',????????},????????'require_debug_true':?{
????????????'()':?'django.utils.log.RequireDebugTrue',????'handlers':?{
????????'console':?{
????????????'level':?'INFO',????????????'filters':?['require_debug_true'],????????????'class':?'logging.StreamHandler',????????????'formatter':?'simple'
????????},????????'mail_admins':?{
????????????'level':?'ERROR',????????????'class':?'django.utils.log.AdminEmailHandler',????????????'filters':?['special']
????????}
????},????'loggers':?{
????????'django':?{
????????????'handlers':?['console'],????????????'propagate':?True,????????'django.request':?{
????????????'handlers':?['mail_admins'],????????????'level':?'ERROR',????????????'propagate':?False,????????'myproject.custom':?{
????????????'handlers':?['console',?'mail_admins'],????????????'level':?'INFO',????????????'filters':?['special']
????????}
????}
}

可以看到里面定义了两种 formatters,两种 filters,两种 handlers 指定了捕获 log 的等级,使用的 filters 和 formater,以及 log 输出到哪里。loggers 定义了三种 loggers,起了名字,指定了了所用的 handler,这里注意,指定的 level 是 logger 所捕获的等级,但传递到 hander 后不一定按照该等级输出,还要看 handler 的输出等级。

使用时在应用程序中示例如下:

import?logging

mylog?=?logging.getLogger('myproject.custom')

if?somethong?wrong:
????mylog.Warning('something?is?wrong')

参考:

https://stackoverflow.com/questions/1598823/elegant-setup-of-python-logging-in-django

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读