@(學(xué)無(wú)止境)
setting.py 中配置LOGGING的handlers時(shí)啰挪,logging.FileHandler信不、logging.handlers.RotatingFileHandler、logging.handlers.TimedRotatingFileHandler的區(qū)別
環(huán)境:
Django版本:2.1.3
Python版本: 3.7.1
區(qū)別:
場(chǎng)景1:只單純想把日志以文件的形式輸出亡呵,選擇logging.FileHandler即可
即:若指定backupCount或者when參數(shù)會(huì)報(bào)錯(cuò)
錯(cuò)誤截屏:
場(chǎng)景2:不僅想把日志以文件的形式輸出抽活,還要實(shí)現(xiàn)日志文件自動(dòng)備份,選擇logging.handlers.RotatingFileHandler即可
即:class為logging.handlers.RotatingFileHandler才可以指定backupCount參數(shù)
場(chǎng)景3:不僅實(shí)現(xiàn)場(chǎng)景2還要實(shí)現(xiàn)指定自動(dòng)備份的時(shí)間锰什,選擇logging.handlers.TimedRotatingFileHandler即可
即:class為logging.handlers.TimedRotatingFileHandler才可以指定backupCount和when參數(shù)
舉例:
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 默認(rèn)為T(mén)rue下硕,若為T(mén)rue那么默認(rèn)配置中的logger將會(huì)全部被禁用丁逝,故需謹(jǐn)慎使用
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', # 此占位符是由其下style參數(shù)指定的
'style': '{', # 默認(rèn)為%,可取值為%梭姓、{霜幼、$ [當(dāng)format傳入了參數(shù)時(shí),用style參數(shù)來(lái)指定占位符]
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
},
'handlers': {
'null': {
'class': 'logging.NullHandler', # 不格式化也不打印【是為了避免No handlers could be found for logger XXX的設(shè)計(jì)】
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'webfile': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler', # logging.FileHandler 設(shè)置backupCount會(huì)出錯(cuò)誉尖,故采用RotatingFileHandler
'filename': '/var/log/blog_www/webapp.log',
'formatter': 'verbose',
'backupCount': 5, # 備份份數(shù)
'when': 'midnight', # class為logging.handlers.TimedRotatingFileHandler時(shí)罪既,才可用
},
'dbfile': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/blog_www/db.log',
'formatter': 'verbose',
'backupCount': 5, # class為logging.handlers.RotatingFileHandler或者logging.handlers.TimedRotatingFileHandler才可用
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'email_backend': 'django.core.mail.backends.filebased.EmailBackend',
'include_html': True,
},
},
'loggers': {
'django': {
'handlers': ['null'],
'level': 'INFO',
'propagate': True, # 是設(shè)定是否向父logger傳播信息 True-是 False-否
},
'django.request': {
'handlers': ['console'],
'level': 'INFO',
'propagate': False,
},
'webapp': {
'handlers': ['console', 'webfile'],
'level': 'INFO',
'propagate': False,
},
'mailtest': {
'handlers': ['mail_admins'],
'level': 'INFO',
'propagate': False,
},
'django.db.backends': {
'handlers': ['console', 'dbfile'],
'level': 'INFO',
'propagate': False
},
},
}