Django Logging
Django Logging
组成部分
Loggers
Handlers
Filters
Formatters
Loggers
loggers是记录系统的入口。他具有日志级别,定义的日志级别如下
DEBUG:用于调试目的的低级系统信息
INFO: 一般系统信息
WARNING: 警告信息
ERROR:错误信息
CRITICAL:关键错误信息
NOTEST: 记录所有
写入logger的每条消息都是日志记录。每个日志记录还具有一个日志级别,表示该消息的严重性。日志记录还可以包含描述正在记录会见的有用元数据。这可以包括诸如堆栈跟踪或错误代码之类的详细信息。
如果消息日志级别达到或超过loggers本身的日志级别,则进行下一步处理,如果没有,则忽略。
一旦记录器确定需要处理消息,他就会传递给Handler。
Handler
Handler是负责进行处理。例如将消息写入屏幕,文件或者socket。
Handler也具有日志级别,如果未达到Handeler的日志级别,则忽略
loggers可以有多个Handler,可以定义不同的日志级别。
Filters
Filters用于提供对从loggers到Handler的日志记录传递的额外控制。
默认情况下,处理所有满足日志级别要求的任何日志消息。也可以自定义其他条件
Formatters
格式化输出。格式化程序通常由包含LogRecord属性的Python格式化字符串组成
配置日志记录
默认情况下Django使用dictConfig格式,配置日志记录。
参考网址
https://docs.python.org/3/library/logging.handlers.html
dictConfig必填
version 目前唯一有效的值为1
其他都是可选的
如果dictConfig中的disable_existing_loggers键LOGGING设置为True(默认值),则将禁用默认配置中的所有记录器。已禁用的记录器与已删除的记录器不同; 记录器仍然存在,但会默默地丢弃记录到它的任何内容,甚至不会将条目传播到父记录器。因此你应该非常小心使用; 它可能不是你想要的。相反,您可以设置到和重新定义的部分或全部的默认记录器; 或者您可以设置 到和处理日志记录配置己。'disable_existing_loggers': Truedisable_existing_loggersFalseLOGGING_CONFIGNone
示例文件
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'file': {'level': 'DEBUG','class': 'logging.FileHandler','filename': '/path/to/django/debug.log',},},'loggers': {'django': {'handlers': ['file'],'level': 'DEBUG','propagate': True,},}, }logging.FileHandler 发送日志输出到磁盘文件 logging.StreamHandler 发送日志输出sys.stdout的,sys.stderr或任何类文件对象
logging.NullHandler 不做任何输出 propagate 向上级传递 logging.handlers.RotatingFileHandler 根据日志大小进行日志轮询
代码中打印日志 import logging logger = logging.getLogger("django") logger.info("hello word!")
打印日志输出到屏幕
import osLOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console': {'class': 'logging.StreamHandler',},},'loggers': {'django': {'handlers': ['console'],'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),},},}
复杂的日志格式
LOGGING = {'version': 1,'disable_existing_loggers': False,'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'},'simple': {'format': '%(levelname)s %(message)s'},},'filters': {'special': {'()': 'project.logging.SpecialFilter','foo': 'bar',},'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',},},'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']}} }
转载于:https://www.cnblogs.com/lfdblog/p/10033403.html
总结
以上是生活随笔为你收集整理的Django Logging的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Docker中运行EOS FOR MAC
- 下一篇: JAVA代码实现多级树结构封装对象