各位用户为了找寻关于Django日志模块logging的配置详解的资料费劲了很多周折。这里教程网为您整理了关于Django日志模块logging的配置详解的相关资料,仅供查阅,以下为您介绍关于Django日志模块logging的配置详解的详细内容
前言
Django对于日志输出的信息是很完善的,request的信息,setting配置,trackback的信息,一应俱全,足够我们调试了。但是在线上环境,如果让用户看到这些信息,是很不安全的(暴露代码)。所以在线上我们要关闭Debug,但是又不能扔掉这些调试信息,这就要用到logging模块。
logging模块其实是Python的模块,在Django中有很多本地化的支持。
理解Logger
首先要理解logging的工作,这里面主要有四个东西:格式器formatter,过滤器filter,处理器handler,日志实例logger。
处理流程
? 1 2 3
formatter
logger ----> handler ----------------> files, emails
filter
处理流程是这样的。首先,在代码中。我们拿到的是logger实例,通过这个实例来记录信息。
? 1 2 3 4 5 6 7 8 9 10 11# 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里面。相应的配置及解释如下(仅供参考)。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75#管理员邮箱
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
,
},
}
}
以上的配置文件中,有三个日志处理器。分别是:
‘django.request':django的request发生error会自动记录,然后使用debug将信息记录到文件,还有mail_admins将信息通过邮件发送给管理员。这里邮件的功能非常棒!并不是一个纯文本信息,而是一个html文件,和我们在浏览器看到的错误页面一模一样!要正常使用邮件功能需要像我一样配置一下上面的邮件发件人信息。我是直接去网易申请了一个邮箱。要格外注意三点:1.一定要去邮件服务商开启SMTP服务;2.不同的邮件服务商可能有一些特殊的设置,比如网易,会给你一个客户端授权码,这个才是密码,而不是网页的登录密码。3 注意服务商有没有对发信频率的限制。 ‘django':使用console处理器,将信息输出。在开发的时候就可以使用这个处理器(什么?print? 太low了!) 最后一个处理器见注释。最后,不要忘了给日志的路径响应的权限。比如Apache2服务器,就需要给www-data写权限:
? 1 2sudo chown
-
R [yourname]:www
-
data [log]
sudo chmod
-
R g
+
s [log]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。