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))#保存并打印错误信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。