FileHandler:继承自StreamHandler,输出到文件,默认情况下,文件无限增长
初始化参数:filename,mode ='a',encoding = None,delay = False
delay如果为True,那么会延迟到第一次调用emit写入数据时才打开文件
RotatingFileHandler:自动按大小切分的log文件(常用)
初始化参数:filename,mode ='a',maxBytes = 0,backupCount = 0,encoding = None,delay = False
maxBytes:最大字节数,超过时创建新的日志文件,如果backupCount或maxBytes有一个为0,那么就一直使用一个文件
backupCount:最大文件个数,新文件的扩展名是指定的文件后加序号".1"等,譬如:backupCount=5,基础文件名为:app.log,那么达到指定maxBytes之后,会关闭文件app.log,将app.log重命名为app.log.1,如果app.log.1存在,那么就顺推,先将 app.log.1重命名为app.log.2,再将现在的app.log命名为app.log.1,最大创建到app.log.5(旧的app.log.5会被删除),然后重新创建app.log文件进行日志写入,也就是永远只会对app.log文件进行写入。
TimedRotatingFileHandler:按时间自动切分的log文件,文件后缀 %Y-%m-%d_%H-%M-%S
初始化参数:filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None
when:时间间隔类型,不区分大小写
interval:间隔的数值
backupCount: 文件个数
encoding:编码
delay:True是写入文件时才打开文件,默认False,实例化时即打开文件
utc:False则使用当地时间,True则使用UTC时间
atTime:必须是datetime.time实例,指定文件第一次切分的时间,when设置为S,M,H,D时,该设置会被忽略
SMTPHandler:通过email发送日志记录消息
初始化参数:mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=5.0
mailhost:发件人邮箱服务器地址(默认25端口)或地址和指定端口的元组,如:('smtp.163.com', 25)
fromaddr:发件人邮箱
toaddrs:收件人邮箱列表
subject:邮件标题
credentials:如果邮箱服务器需要登录,则传递(username, password)元组
secure:使用TLS加密协议
1.settings中配置
通过在settings中配置LOGGING配置项实现日志配置,共4个配置项(都是可选的,不过一般会指定handler):
level:指定记录日志的级别,没有配置则处理所有级别的日子
propagate:设置该记录器的日志是否传播到父记录器,不设置则是True
filters:指定过滤器列表
handlers:指定处理器列表
示例如下:
LOGGING = { 'version': 1, # 固定值,现在只有这一个版本 'disable_existing_loggers': False, # 设置已存在的logger不失效 'loggers': { '': { 'handlers': ['console'], }, 'django': { 'handlers': ['console'], 'propagate': True, }, 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': False, }, 'myproject.custom': { 'handlers': ['console', 'mail_admins'], 'level': 'INFO', 'filters': ['special'] } } }配置了4个 logger, 分别对应2个不同的handler(console输出日志到控制台,mail_admins输出日志到邮件)
'':默认的记录器,不指定特定名称,那么就是使用这个记录器,没有配置level,那么就是处理所有级别的日志,传递所有级别的日志到console控制器
django:传递所有级别的日志到console控制器
django.request:django记录器的子记录器,处理ERROR级别及以上的日志,propagate设置为 False,表明不传播日志给 "django",该logger传递日志到mail_admins控制器
myproject.custom:处理INFO级别及以上的日志,应用了一个 special 的过滤器来过滤日志,传递日志到2个控制器(['console', 'mail_admins'])处理
注意
django框架有个默认的配置:DEFAULT_LOGGING,一旦配置了自己的LOGGING后,那么所有的默认的LOGGER全部都失效,失效不等于没有记录器了,而是说记录器不起作用了,即不会记录日志,也不会将日志传播给父记录器。因此你应该非常小心使用,因为你会感觉你丢了日志一样,可以手动设置同名的logger实现覆盖,如:
2.django内置的logger