快速上手Django(四) Django 日志打印

一、快速上手Django(四) Django 日志打

官网:https://docs.djangoproject.com/en/2.1/topics/logging/

Django 中如何优雅的记录日志
参考URL: https://zhuanlan.zhihu.com/p/133864368

Django对于日志输出的信息是很完善的,request的信息,setting配置,trackback的信息,一应俱全,足够我们调试了。但是在线上环境,如果让用户看到这些信息,是很不安全的(暴露代码)。所以在线上我们要关闭Debug,但是又不能扔掉这些调试信息,这就要用到logging模块。

logging模块其实是Python的模块,在Django中有很多本地化的支持。

在 Django 中使用 Python 的标准库 logging 模块来记录日志,关于 logging 的配置,我这里不做过多介绍,只写其中最重要的四个部分:Loggers、Handlers、Filters 和 Formatters。

1. 日志处理流程

格式器formatter,过滤器filter,处理器handler,日志实例logger。

   formatter
logger ----> handler ----------------> files, emails
    filter

处理流程是这样的。首先,在代码中。我们拿到的是logger实例,通过这个实例来记录信息。

# import the logging library
import logging
 
# Get an instance of a logger
logger = logging.getLogger('django')
 
def my_view(request, arg1, arg):
 ...
 if bad_mojo:
 # Log an error message
 logger.error('Something went wrong!')

然后,名字是django的这个logger就会把信息交给相应的handler,handler把信息用formater和filter处理一下,提交log(保存到文件,数据库,或者发送邮件)。

2. Loggers

Logger 即记录器,是日志系统的入口。它有三个重要的工作:

向应用程序(也就是你的项目)公开几种方法,以便运行时记录消息
根据传递给 Logger 的消息的严重性,确定消息是否需要处理
将需要处理的消息传递给所有感兴趣的处理器 Handler
每一条写入 Logger 的消息都是一条日志记录,每一条日志记录都包含级别,代表对应消息的严重程度。常用的级别如下:

DEBUG:排查故障时使用的低级别系统信息,通常开发时使用
INFO:一般的系统信息,并不算问题
WARNING:描述系统发生小问题的信息,但通常不影响功能
ERROR:描述系统发生大问题的信息,可能会导致功能不正常
CRITICAL:描述系统发生严重问题的信息,应用程序有崩溃的风险
当 Logger 处理一条消息时,会将自己的日志级别和这条消息配置的级别做对比。如果消息的级别匹配或者高于 Logger 的日志级别,它就会被进一步处理,否则这条消息就会被忽略掉。

当 Logger 确定了一条消息需要处理之后,会把它传给 Handler。

3. Handlers

Handler 即处理器,它的主要功能是决定如何处理 Logger 中的每一条消息,比如把消息输出到屏幕、文件或者 Email 中。

和 Logger 一样,Handler 也有级别的概念。如果一条日志记录的级别不匹配或者低于 Handler 的日志级别,则会被 Handler 忽略。

一个 Logger 可以有多个 Handler,每一个 Handler 可以有不同的日志级别。这样就可以根据消息的重要性不同,来提供不同类型的输出。例如,你可以添加一个 Handler 把 ERROR 和 CRITICAL 消息发到你的 Email,再添加另一个 Handler 把所有的消息(包括 ERROR 和 CRITICAL 消息)保存到文件里。

4. Filters

Filter 即过滤器。在日志记录从 Logger 传到 Handler 的过程中,使用 Filter 来做额外的控制。例如,只允许某个特定来源的 ERROR 消息输出。

Filter 还被用来在日志输出之前对日志记录做修改。例如,当满足一定条件时,把日志级别从 ERROR 降到 WARNING 。

Filter 在 Logger 和 Handler 中都可以添加,多个 Filter 可以链接起来使用,来做多重过滤操作。

5. Formaters

Formatter 即格式化器,主要功能是确定最终输出的形式和内容。

二、Django日志模块logging的配置详解

Django日志模块logging的配置详解
参考URL: http://www.zzvips.com/article/105711.html

配置方式
Python中可以使用多种格式配置logging,比如.conf, .ini等。

在Django中,我们是把有关logging的配置写到settings里面。

1. 生产实战配置demo

生产实战配置settings.py 中日志配置 demo

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(asctime)s %(levelname)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'filelog': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'formatter': 'verbose',
            'filename': './webapp.log',
            'when': 'midnight',
            'backupCount': 5
        }
    },
    'loggers': {
        'django': {
            'handlers': ['null'],
            'propagate': True,
            'level': 'INFO',
        },
        'django.request': {
            'handlers': ['console', 'filelog'],
            'level': 'ERROR',
            'propagate': False,
        },
        'webapp': {
            'handlers': ['console', 'filelog'],
            'propagate': True,
            'level': 'INFO',
        }

    }
}

注意: 您全局设置了 Debug为True,在这里LOGGING 中也要记得配置对应的日志等级,才能打印出对应的日志等级的日志。亲测!

留意filelog下的 filename字段,决定了日志最终写到哪个文件!

1.1 Django终端打印SQL语句

在django项目的setting.py文件中最下面,添加一下内容

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}

核心就是:
‘django.db.backends’: {
‘handlers’: [‘console’,‘filelog’],
‘propagate’: True,
‘level’: ‘DEBUG’,
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值