Django logging配置及使用详解
1.settings.py文件
做开发离不开必定离不开日志,以下是我在工作中写Django项目常用的logging配置.
#日志配置
BASE_LOG_DIR=os.path.join(BASE_DIR,"log")
LOGGING={
'version':1,#保留字
'disable_existing_loggers':False,#是否禁用已经存在的日志实例
'formatters':{#定义日志的格式
'standard':{
'format':'[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]'
},
'simple':{
'format':'[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
},
'collect':{
'format':'%(message)s'
}
},
'filters':{#定义日志的过滤器
'require_debug_true':{
'()':'django.utils.log.RequireDebugTrue',
},
},
'handlers':{#日志处理程序
'console':{
'level':'DEBUG',
'filters':['require_debug_true'],#只有在Djangodebug为True时才在屏幕打印日志
'class':'logging.StreamHandler',
'formatter':'simple'
},
'SF':{
'level':'INFO',
'class':'logging.handlers.RotatingFileHandler',#保存到文件,根据文件大小自动切
'filename':os.path.join(BASE_LOG_DIR,"xxx_info.log"),#日志文件
'maxBytes':1024*1024*500,#日志大小50M(最好不要超过1G)
'backupCount':3,#备份数为3xx.log-->xx.log.1-->xx.log.2-->xx.log.3
'formatter':'standard',
'encoding':'utf-8',#文件记录的编码格式
},
'TF':{
'level':'INFO',
'class':'logging.handlers.TimedRotatingFileHandler',#保存到文件,根据时间自动切
'filename':os.path.join(BASE_LOG_DIR,"xxx_info.log"),#日志文件
'backupCount':3,#备份数为3xx.log-->xx.log.2018-08-23_00-00-00-->xx.log.2018-08-24_00-00-00-->...
'when':'D',#每天一切,可选值有S/秒M/分H/小时D/天W0-W6/周(0=周一)midnight/如果没指定时间就默认在午夜
'formatter':'standard',
'encoding':'utf-8',
},
'error':{
'level':'ERROR',
'class':'logging.handlers.RotatingFileHandler',#保存到文件,自动切
'filename':os.path.join(BASE_LOG_DIR,"xxx_err.log"),#日志文件
'maxBytes':1024*1024*5,#日志大小50M
'backupCount':5,
'formatter':'standard',
'encoding':'utf-8',
},
'collect':{
'level':'INFO',
'class':'logging.handlers.RotatingFileHandler',#保存到文件,自动切
'filename':os.path.join(BASE_LOG_DIR,"xxx_collect.log"),
'maxBytes':1024*1024*50,#日志大小50M
'backupCount':5,
'formatter':'collect',
'encoding':"utf-8"
}
},
'loggers':{#日志实例
'':{#默认的logger应用如下配置
'handlers':['SF','console','error'],#上线之后可以把'console'移除
'level':'DEBUG',
'propagate':True,#是否向上一级logger实例传递日志信息
},
'collect':{#名为'collect'的logger还单独处理
'handlers':['console','collect'],
'level':'INFO',
}
},
}
2.在Django根目录下创建log文件夹
3.logging的使用
有了logging配置之后,我们在今后的项目中,就尽量不再使用print语句来打印信息,进行BUG调试.更专业的我们将使用logger对象来保存并打印错误信息.
例如:
importlogging
#实例化logging对象,并以当前文件的名字作为logger实例的名字
logger=logging.getLogger(__name__)
#生成一个名字叫做collect的日志实例
logger_c=logging.getLogger('collect')
classFoo(object):
deftest(self,data):
logger.debug(data)#打印data
try:
...
exceptExceptionase:
logger.error(str(e))#保存并打印错误信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。