logger: 日志系统的入口,可以配置 日志级别
Handlers
过滤器
Formatters
logger是日志的系统的入口,可以配置日志级别(日志级别:描述该logger处理的消息的严重性)
日志级别:
1.DEBUG:排查故障时使用的低级别系统信息
2.INFO:一般的系统信息
3.WARNING:描述系统发生了一些小问题的信息
4.ERROR:描述系统发生了大问题的信息
5.CRITICAL:描述系统发生严重问题的信息
每一条写入 logger 的消息都是一条日志记录。每一条日志记录也包含日志级别,代表对应消息的严重程度。
当 logger 处理一条消息时,会将自己的日志级别和这条消息的日志级别做对比。如果消息的日志级别匹配或者高于 logger 的日志级别,它就会被进一步处理。否则这条消息就会被忽略掉。
当 logger 确定了一条消息需要处理之后,会把它传给 Handler
2.Handlers
Handlers是决定如何处理logger中每一条消息的引擎。它描述特定的日志行为,比如把消息输出到屏幕、文件或网络 socket。
handler 也有日志级别的概念。如果一条日志记录的级别不匹配或者低于 handler 的日志级别,对应的消息会被 handler 忽略。
一个 logger 可以有多个 handler,每一个 handler 可以有不同的日志级别。这样就可以根据消息的重要性不同,来提供不同格式的输出
3.过滤器
在日志记录从 logger 传到 handler 的过程中,使用 Filter 来做额外的控制。
默认情况下,只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加 filter 来给日志处理的过程增加额外条件。例如,可以添加一个 filter 只允许某个特定来源的 ERROR 消息输出。
Filter 还被用来在日志输出之前对日志记录做修改。例如,可以写一个 filter,当满足一定条件时,把日志记录从 ERROR 降到 WARNING 级别。
Filter 在 logger 和 handler 中都可以添加;多个 filter 可以链接起来使用,来做多重过滤操作。
4.Formatters
日志记录最终是需要以文本来呈现的。Formatter 描述了文本的格式。一个 formatter 通常由包含 :ref:](https://docs.djangoproject.com/zh-hans/2.1/topics/logging/#id1)LogRecord attributes [python:logrecord-attributes 的 Python 格式化字符串组成,不过你也可以为特定的格式来配置自定义的 formatter。
模块日志的配置1.disable_existing_loggers
默认就是Ture,那么默认配置中的logger全部被禁用。被禁用的logger并不是被删除了,它们仍然存在,只是静默地丢弃所有发来的日志请求,甚至不会传播给上级logger
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': { # 日志信息显示的格式
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
},
'filters': {
'special': {
'()': 'project.logging.SpecialFilter',
'foo': 'bar',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',# django在debug模式下才输出日志
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['special']
}
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,#是否继续传递日志信息
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'myproject.custom': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
'filters': ['special']
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |