django使用python的内置模块logging来管理自己的日志
这几个例子,官方文档上都有,这里只做简要分析
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/django/debug.log', # 输出日志到指定位置的文件中
},
},
'loggers': {
'django': { # django框架的输出日志配置
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
import os
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), # 此为True时,可看到所有日志。包含ORM生成的sql语句
},
},
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
# verbose输出稍复杂信息,等级、日志、附加时间、进程号等等
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
# simple只输出日志级别和日志信息
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'filters': {
# 使用别名special,如果这个过滤器需要附加参数,它可以提供一个配置字典
# 在本例中,在实例化SqecialFilter时参数foo会被赋值为bar
'special': {
'()': 'project.logging.SpecialFilter',
'foo': 'bar',
},
# 只有在环境变量DEBUG等于True时才输出日志
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
# 直接输出级别为DEBUG(或更高)的信息到控制台,本handler使用名称为simple的format
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
# 使用AdminEmailHandler发送级别为ERROR(或更高)的信息到网站管理员邮箱,这个handler使用名称为special的过滤器
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['special']
}
},
'loggers': {
# 打印所有信息到名称为console的handler
'django': {
'handlers': ['console'],
'propagate': True,
},
# 传递ERROR级别的信息到名为mail_admins的handler
# 另外的,该条记录器标示了如果使用本记录器处理日志,那么将不使用django处理
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False, ###
},
# 传递所有INFO级别(或更高)信息到名称为special的过滤器和两个handler
# 这样就实现了如果是INFO级别的信息则打印到控制台,如果是ERROR或者CRITICAL级别的则通过email发送给管理员
'myproject.custom': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
'filters': ['special']
}
}
}