Django日志模块logging的配置详解
|
前言 Django对于日志输出的信息是很完善的,request的信息,setting配置,trackback的信息,一应俱全,足够我们调试了。但是在线上环境,如果让用户看到这些信息,是很不安全的(暴露代码)。所以在线上我们要关闭Debug,但是又不能扔掉这些调试信息,这就要用到logging模块。 logging模块其实是Python的模块,在Django中有很多本地化的支持。 理解Logger 首先要理解logging的工作,这里面主要有四个东西:格式器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(保存到文件,数据库,或者发送邮件)。 一般来说,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错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = 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,}
}
以上的配置文件中,有三个日志处理器。分别是:
最后,不要忘了给日志的路径响应的权限。比如Apache2服务器,就需要给www-data写权限: sudo chown -R [yourname]:www-data [log] sudo chmod -R g+s [log] 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 您可能感兴趣的文章:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 更改discord.py中的昵称会引发错误
- python 通过logging写入日志到文件和控制台的实例
- 用python 写了一个求空间俩点之间的距离的脚本
- django批量导入xml数据
- Python中给List添加元素的4种方法分享
- python – Google App Engine中模型的默认值
- python – 使用parseString时的pyparsing.ParseException(s
- 在Python下使用Txt2Html实现网页过滤代理的教程
- python – 使用ZMQ PUB与.connect()或.bind()方法有什么区别
- Python请求库添加了一个额外的标题“Accept-Encoding:iden
