参考文献: https://blog.csdn.net/weixin_37590093/article/details/81536372
Loggers
Loggers中的logger是整个日志机制的入口,一个logger对应一种类型的日志。logger通过设定日志级别(level属性),来配置logger的触发条件。Python中定义了5种日志级别:
由低到高分别为:DEBUG -> INFO -> WARNING -> ERROR -> CRITICAL。
settings中的配置
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": { # 日志格式定义
"verbose": {
"format": "%(levelname)s %(asctime)s %(pathname)s:%(lineno)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": "DEBUG",
"filters": [],
"class": "logging.StreamHandler",
"formatter": "verbose"
},
"default": {
"level": "INFO",
"class": "logging.handlers.RotatingFileHandler",
"filename": "/var/log/xiangmu/default.log", # 日志存放路径
"maxBytes": 1024*1024*5, # 5MB
"backupCount": 2,
"formatter": "verbose",
},
"mail_admins": {
"level": "ERROR",
"class": "django.utils.log.AdminEmailHandler",
"filters": [],
},
},
"loggers": {
"django": {
"handlers": ["console"],
"level": "INFO",
"propagate": True,
},
"django.request": {
"handlers": ["console"],
"level": "ERROR",
"propagate": False, # 不让特定的logger传播到它的上级
},
"""’django’是’django.request’的上级。这种层级关系的设计,使得低层次logger接收到的日志信息,也可以被上级logger收到。
实践中,我们可以定义一个顶级的logger,用来接收所有下级logger的日志信息。这种传播可以在每个logger基础上进行控制.
如果你不想让特定的logger传播到它的上级,可以关闭这个行为。通过设置'propagate': False,来实现。"""
"xiangmu": {
"handlers": ["console"],
"level": "INFO",
"filters": []
},
"app01": {
"handlers": ["console", "default"],
"level": "INFO",
"filters": [],
"propagate": True,
},
"app02": {
"handlers": ["console"],
"level": "INFO",
"filters": [],
},
"app03": {
"handlers": ["console"],
"level": "INFO",
"filters": [],
}
}
}
打印需要打印的日志:
# coding=utf-8
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger(__name__)
# 打印日志
logger.exception("unknown message type: %s", msg_type)
logger.exception("|---------异常触发的日志")
logger.error("sid error", exc_info=True)
logger.warning("xxx不存在")
logger.info("|------日志内容")
# 记录日志有5个对应的方法。
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()
# 此外,还有两种日志方法
logger.log() # 手动记录一个日志,随便你想记录什么都行
logger.exception() # 为了捕获某些异常,创建一个ERROR级别的日志
所有与日志有关的配置默认在LOGGING ={}中,distConfig格式。如果我们没有进行特别配置,Django会执行默认的日志配置。
默认配置
- DEBUG = True
‘django’这个logger以及其(除了django.server之外的)所有下级的INFO以上的日志,都会被StreamHandler处理(输出到console)
- DEBUG = Flase
‘django’这个logger以及其(除了django.server之外的)所有下级的ERROR和CRITICAL的日志,都会被AdminEmailHandler处理(发送至指定邮件)
如果我们不想使用默认的配置,可以将LOGGING中的'disable_existing_loggers'设置为True(默认也是True),这样一来,默认的配置就会被禁用。但是设置'disable_existing_loggers': True,必须要非常小心,因为可能产生一些令人意外的结果(官网这么说的,还没试过),所以比较建议的方法是'disable_existing_loggers': False,然后重写部分或者全部的默认logger。
在控制台中输出日志
这种方式在本地开发环境进行调试时比较有帮助,很直观,需要的时候马上就能看到输出,不必切换到文件或者查收邮件。不过在生产环境下最好不要输出到控制台。默认情况下,只有在DEBUG = True的时候才会将日志输出到控制台,而且只处理INFO以上级别的日志。默认情况下,这种日志并不会输出很多信息,如果你想看到操作数据库的细节,可以在logger的level中设置'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),这样就可以了。不过这样产生的日志也有点太多了。
import os
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}
handlers中定义了两个handler:'console'和'mail_admins'。'console'配置'class': 'logging.StreamHandler',这个我们不用过多去说。重点看看'mail_admins',配置'class': 'django.utils.log.AdminEmailHandler',那么既然要配置为通过邮件发送日志,那么是不是有必要设置一下发送和接收的邮件呢?
邮箱的配置也在settings.py中:
# 邮件配置
EMAIL_HOST = 'smtp.maildomain.com' # SMTP地址
EMAIL_PORT = 25 # SMTP端口
EMAIL_HOST_USER = 'sender@maildomain.com' # 发送邮件的邮箱
EMAIL_HOST_PASSWORD = '******' # 我的邮箱密码
EMAIL_SUBJECT_PREFIX = u'[prefix]' # 为邮件Subject-line前缀,默认是'[django]'
EMAIL_USE_TLS = True # 与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
# 管理员站点
SERVER_EMAIL = 'xinxinyu2011@163.com' # The email address that error messages come from, such as those sent to ADMINS and MANAGERS.
ADMINS = (('receiver', 'receiver@maildomain.com'),) # 接收邮件的邮箱(或邮件组)
本文介绍了Django的日志设置,包括在控制台中输出日志的详细步骤。当`DEBUG = True`时,日志默认输出到控制台,级别为INFO及以上;而`DEBUG = False`时,ERROR和CRITICAL级别的日志将通过AdminEmailHandler发送到指定邮件。日志级别从低到高为DEBUG, INFO, WARNING, ERROR, CRITICAL。可以通过设置`LOGGING['disable_existing_loggers']`来改变默认配置,并通过`DJANGO_LOG_LEVEL`环境变量控制日志级别。"
111694200,10295660,CDO:高效气象数据处理工具详解,"['数据处理', '气候数据', 'CDO工具', 'nc数据', '气象科学']

3247

被折叠的 条评论
为什么被折叠?



