LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 是否禁用已经存在的日至实例(diango自带的报错),一般不禁用
'formatters': { # 定义输出日志的格式
'standard': { # 格式名字可以随意定义
'format': '[%(levelname)s][%(asctime)s][%(filename)s][%(funcName)s][%(lineno)d] > %(message)s'
# 定义信息格式,自己随便定义,都有什么内容查看下边内容
},
'simple': {
'format': '[%(levelname)s]> %(message)s'
},
},
'filters': {
'require_debug_true': { # 只有在settings中的debug=True的时候才会生效
'()': 'django.utils.log.RequireDebugTrue', # 指定过滤器但是不知道是干什么的没研究明白
},
},
'handlers': { # 都叫这个为控制器,控制是什么样的记录方式等的一些参数
'default': {
'level': 'DEBUG', # 日志级别
'class': 'logging.handlers.RotatingFileHandler', # 定义日志的切分格式,以及输出方式
'filename': os.path.join(LOGS_DIR, 'django.log'), # 日志文件,请确保修改'filename'路径为运行Django应用的用户有权限写入的一个位置
'maxBytes': 1024 * 1024 * 5, # 5 MB 文件大小
'backupCount': 60, # 备份份数
'formatter': 'standard', # 使用哪种日志格式
},
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler', # 输出到控制台,这个类指定的不同输出方式不一样,下边是这个地方指定的类所需要的参数
'formatter': 'simple'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
# 参照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
# 目前设定每天一个日志文件
'filename': os.path.join(LOGS_DIR, 'everyday.log'),
'when': 'midnight',
'interval': 1,
'backupCount': 60,
'formatter': 'standard'
},
},
'loggers': { # 都叫这个容器,配置上容器内使用什么控制器记录日志,后边实例化时getLogger内写的就是这个里面的某个容器名
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': True,
},
'django.everyday': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
'propagate': True,
},
}
}
这个是我很常用的一个django的logger的配置。
之前一直很奇怪为什么日志时有时无,今天发现了一些门道,简单记录一下。
上面的配置都好理解,所以咱们直接看loggers这里。
'loggers': {
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': True,
},
'django.everyday': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
'propagate': True,
},
}
以前我在view文件里面会先调用getLogger代码来获取一个logger
logger = logging.getLogger("django.everyday")
但是我发现很多信息都只有在django.log
里面才有everyday.log
里面的日志信息总是很少。
今天测试一下才发现
①系统自带的一些日志信息会自动输出在django
这个logger里面,所以如果你想看到系统记录的日志信息你就必须注册这个logger。
②everyday.log
文件里面只会记录我通过调用logger输出的日志。
③虽然我注册的是django.everyday
,但日志一样会输入到django
这个logger里面去。