Django中Logging日志配置
Posted jeromelong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中Logging日志配置相关的知识,希望对你有一定的参考价值。
Django日志配置
-
django中的log需要在settings.py中配置
import time LOGGING_DIR = os.path.join(BASE_DIR, "logs") # LOGGING_DIR 日志文件存放目录 if not os.path.exists(LOGGING_DIR): os.mkdir(LOGGING_DIR) LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: True, # 禁用已存在的log,详情见下面 ‘formatters‘: { # 格式器 ‘standard‘: { ‘format‘: ‘[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] ‘ ‘[%(levelname)s]- %(message)s‘}, ‘simple‘: { # 简单格式 ‘format‘: ‘%(levelname)s %(message)s‘ }, }, ‘filters‘: { # 过滤器 }, # 定义具体处理日志的方式 ‘handlers‘: { # 默认记录所有日志 ‘default‘: { ‘level‘: ‘INFO‘, ‘class‘: ‘logging.handlers.RotatingFileHandler‘, ‘filename‘: os.path.join(LOGGING_DIR, ‘all-{}.log‘.format(time.strftime(‘%Y-%m-%d‘))), ‘maxBytes‘: 1024 * 1024 * 5, # 文件大小 ‘backupCount‘: 5, # 备份数 ‘formatter‘: ‘standard‘, # 输出格式 ‘encoding‘: ‘utf-8‘, # 设置默认编码 }, # 输出错误日志 ‘error‘: { ‘level‘: ‘ERROR‘, ‘class‘: ‘logging.handlers.RotatingFileHandler‘, ‘filename‘: os.path.join(LOGGING_DIR, ‘error-{}.log‘.format(time.strftime(‘%Y-%m-%d‘))), ‘maxBytes‘: 1024 * 1024 * 5, # 文件大小 ‘backupCount‘: 5, # 备份数 ‘formatter‘: ‘standard‘, # 输出格式 ‘encoding‘: ‘utf-8‘, # 设置默认编码 }, # 控制台输出 ‘console‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.StreamHandler‘, ‘formatter‘: ‘standard‘ }, # 输出info日志 ‘info‘: { ‘level‘: ‘INFO‘, ‘class‘: ‘logging.handlers.RotatingFileHandler‘, ‘filename‘: os.path.join(LOGGING_DIR, ‘info-{}.log‘.format(time.strftime(‘%Y-%m-%d‘))), ‘maxBytes‘: 1024 * 1024 * 5, ‘backupCount‘: 5, ‘formatter‘: ‘standard‘, ‘encoding‘: ‘utf-8‘, # 设置默认编码 }, }, # 配置用哪几种 handlers 来处理日志 ‘loggers‘: { # 类型 为 django 处理所有类型的日志, 默认调用 ‘django‘: { ‘handlers‘: [‘default‘, ‘console‘], ‘level‘: ‘INFO‘, ‘propagate‘: False }, # log 调用时需要当作参数传入 ‘log‘: { ‘handlers‘: [‘error‘, ‘info‘, ‘console‘, ‘default‘], ‘level‘: ‘INFO‘, ‘propagate‘: True }, } }
注释很详细,就不多做介绍了。
-
脚本中调用:
import logging logger = logging.getLogger(‘log‘) ... logger.info(‘请求成功! response_code:{};response_headers:{};response_body:{}‘.format(response_code, response_headers, response_body[:251])) logger.error(‘请求出错:{}‘.format(error))
禁用日志配置
LOGGING_CONFIG=None,禁用。
Django自带的记录器
django记录器是捕捉所有消息的记录器,没有消息是直接发往django记录器的,而是使用下面的记录器:
- django.request记录器
5XX会引发一个error消息,4XX会引发一个warning消息,这个记录器还附带有额外的上下文:
status_code:HTTP响应吗
request:生成这个消息的request对象
- django.db.backends记录器
所有的由请求运行的sql语句都会记录一条debug的消息,每个记录器还附带有额外的上下文:
duration:sql语句运行的时间
sql:运行的sql语句
params:sql语句调用的参数
处于网站运行的表现原因,仅当settings.DEBUG=True的时候,这个处理器才生效,否则即使配置了也无效。
Django自带的过滤器
-
class CallBackFilter(callback)
这个过滤器接受一个回调函数(这个函数接受一个参数,被记录的信息),每个记录通过过滤器的时候都会调用这个回调函数,当回调函数返回False的时候,不处理这个记录。下面是一个示例:
from django.http import UnreadablePostError def skip_unreadable_post(record): if record.exc_info: exc_type, exc_value = record.exc_info[:2] if isinstance(exc_value, UnreadablePostError): return False return True ‘filters‘: { ‘skip_unreadable_posts‘: { ‘()‘: ‘django.utils.log.CallbackFilter‘, ‘callback‘: skip_unreadable_post, } }, ‘handlers‘: { ‘mail_admins‘: { ‘level‘: ‘ERROR‘, ‘filters‘: [‘skip_unreadable_posts‘], ‘class‘: ‘django.utils.log.AdminEmailHandler‘ } },
-
class RequireDebugFalse
此过滤器仅在settings.DEBUG为False时传递记录。
-
class RequireDebugTrue
此过滤器仅当settings.DEBUG为True时传递记录。
以上是关于Django中Logging日志配置的主要内容,如果未能解决你的问题,请参考以下文章
Django 中使用 logging 配置 logger 自定义日志输出