首页 > 编程 > Python > 正文

Django日志模块logging的配置详解

2020-02-23 04:22:49
字体:
来源:转载
供稿:网友

前言

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

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

理解Logger

首先要理解logging的工作,这里面主要有四个东西:格式器formatter,过滤器filter,处理器handler,日志实例logger。

处理流程

   formatterlogger ----> handler ----------------> files, emails    filter

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

# import the logging libraryimport logging # Get an instance of a loggerlogger = 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(保存到文件,数据库,或者发送邮件)。

一般来说,handler可以是send_email,error_file等负责处理的方式,在logger中可以重复使用handler。例如我们的django处理器使用了send_email, error_file 这两个处理器,request处理器使用error_file,info_file两个处理器,logger和handler可以理解成多对多的关系,嘻嘻。

配置方式

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

在Django中,我们是把有关logging的配置写到settings里面。相应的配置及解释如下(仅供参考)。

#管理员邮箱ADMINS = ( ('laixintao','*******@163.com'),) #非空链接,却发生404错误,发送通知MANAGERSSEND_BROKEN_LINK_EMAILS = TrueMANAGERS = ADMINS #Email设置EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_HOST= 'smtp.163.com'#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)EMAIL_PORT= 25 #QQ邮箱SMTP服务端口EMAIL_HOST_USER = '**********@163.com' #我的邮箱帐号EMAIL_HOST_PASSWORD = '**************' #授权码EMAIL_SUBJECT_PREFIX = 'website' #为邮件标题的前缀,默认是'[django]'EMAIL_USE_TLS = True #开启安全链接DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人 #logging日志配置LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': {#日志格式  'standard': {  'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}  }, 'filters': {#过滤器 'require_debug_false': {  '()': 'django.utils.log.RequireDebugFalse',  } }, 'handlers': {#处理器 'null': {  'level': 'DEBUG',  'class': 'logging.NullHandler', }, 'mail_admins': {#发送邮件通知管理员  'level': 'ERROR',  'class': 'django.utils.log.AdminEmailHandler',  'filters': ['require_debug_false'],# 仅当 DEBUG = False 时才发送邮件  'include_html': True, }, 'debug': {#记录到日志文件(需要创建对应的目录,否则会出错)  'level':'DEBUG',  'class':'logging.handlers.RotatingFileHandler',  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件  'maxBytes':1024*1024*5,#文件大小   'backupCount': 5,#备份份数  'formatter':'standard',#使用哪种formatters日志格式 }, 'console':{#输出到控制台  'level': 'DEBUG',  'class': 'logging.StreamHandler',  'formatter': 'standard', }, }, 'loggers': {#logging管理器 'django': {  'handlers': ['console'],  'level': 'DEBUG',  'propagate': False  }, 'django.request': {  'handlers': ['debug','mail_admins'],  'level': 'ERROR',  'propagate': True, }, # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件 'django.security.DisallowedHost': {  'handlers': ['null'],  'propagate': False, }, } }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表