LOGGING = {
'version': 1, # 保留的参数,默认是1
'disable_existing_loggers': False, # 是否禁用已经存在的logger示例,不禁用
'formatters': {
'standard': { # 定义一个标准的日志格式化
'format': '%(process)s %(thread)d %(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(lineno)d: %(message)s'
},
'error': {
'format': '%(process)s %(thread)d %(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(lineno)d: %(message)s'
}
},
# 过滤器
'filters': {
# 只有在deubg=True的过滤器
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
# 处理器
'handlers': {
'django_info': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, "info.log"), # 日志文件
# 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 14,
'when': 'MIDNIGHT',
'formatter': 'standard',
'encoding': 'utf-8'
},
'django_warn': {
'level': 'WARN',
'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, "warning.log"), # 日志文件
'backupCount': 14,
'when': 'MIDNIGHT',
'formatter': 'standard',
'encoding': 'utf-8'
},
'django_error': {
'level': 'ERROR',
'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, "error.log"), # 日志文件
# 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 14,
'when': 'MIDNIGHT',
'formatter': 'standard',
'encoding': 'utf-8'
},
},
'loggers': {
'django': {
'handlers': ['django_info', 'django_warn', 'django_error'],
'level': 'INFO'
},
},
}
使用logging模块的logger,handler,formatter和filter组件,在settings.py文件中增加LOGGING配置,django框架进行配置自动处理。
TimedRotatingFileHandler是创建固定时间间隔的日志。
参数解释:
filename 是输出日志的文件名称前缀,比如说 testServiceLog 这样的就是日志文件名前缀
when 是一个字符串,定义了日志切分的间隔时间单位,这是一个枚举类,可选参数如下:
"S":Second 秒
"M":Minutes 分钟
"H":Hour 小时
"D":Days 天
"W":Week day(0 = Monday)
"midnight":Roll over at midnight
interval 是间隔时间单位的个数,指等待多少个 when 的时间后 Logger 会自动重建新闻继续进行日志记录
这里需要注意的一点是,如果创建的文件和已有文件存在重名的情况,则会对历史的文件进行覆盖操作,所以使用好 suffix 避免文件名称重复
backupCount 是保留日志的文件个数
默认的参数是0,这种设置下是不会自动删除文件的。如果设置为 N(正整数),则会在创建新的日志文件时会检查日志文件个数是否到达 N,达到了的话就会从最先创建的开始删除,从而达到维持日志文件个数为 N 个的目标
总结:django框架配置的logging模块使用很方便,输出日志只需要获取logger实例,即可进行日志记录。TimedRotatingFileHandler能针对日志文件自动进行滚动记录,方便日志的回溯。参考:https://blog.csdn.net/weixin_36273267/article/details/105291465