Django日记

打印 上一主题 下一主题

主题 682|帖子 682|积分 2046

【图书介绍】《Django 5企业级Web应用开发实战(视频讲授版)》_django 5企业级web应用开发实战(视频讲授版)-CSDN博客
《Django 5企业级Web应用开发实战(视频讲授版)》(王金柱)【择要 书评 试读】- 京东图书 (jd.com)
Django 5框架Web应用开发_炎天又到了的博客-CSDN博客
本节主要介绍关于Django框架日记方面的内容。Django使用Python的内置日记记录模块执行体系日记记录,主要包括了Logger、Handler、Filter和Formatter这4个模块。
11.2.1  Logger

Logger是进入日记体系的入口点,每个Logger都是一个命名的存储集合,可以将消息写入其中以进行处置惩罚。
Logger具有日记级别,日记级别描述了Logger将处置惩罚的消息的严重性。Python定义了以下日记级别:


  • DEBUG:用于调试目的的底层体系信息。
  • INFO:通用体系信息。
  • WARNING:描述已发生的警告问题的信息。
  • ERROR:描述已发生的主要问题的信息。
  • CRITICAL:描述已发生的严重问题的信息。
写入Logger的每条消息都是一个日记记录。每个日记记录还具有指示该特定消息的严重性的日记级别。日记记录还可以包含有用的元数据,该元数据描述了正在记录的事件,可以包括详细信息,比方堆栈跟踪或错误代码。
将消息提供给Logger时,会将消息的日记级别与Logger的日记级别进行比较。假如消息的日记级别到达或超过Logger本身的日记级别,则将对消息进行进一步处置惩罚;假如没有,该消息将被忽略。
当Logger确定必要处置惩罚消息后,就会将消息传递给相应处置惩罚步伐(Handle)。
11.2.2  Handler

处置惩罚步伐是确定Logger中每个消息发生什么情况的引擎,描述了特定的日记记录行为。比方,将消息写到屏幕、文件或网络套接字。
犹如Logger一样,处置惩罚步伐也具有日记级别。假如日记记录的日记级别不满足或超过处置惩罚步伐的级别,则处置惩罚步伐将忽略该消息。
一个Logger可以具有多个处置惩罚步伐,而且每个处置惩罚步伐可以具有不同的日记级别。这样,可以根据消息的紧张性提供不同形式的关照。比方,可以安装一个处置惩罚步伐,将ERROR和CRITICAL消息转发到分页服务,而另一个处置惩罚步伐将所有消息(包括ERROR和CRITICAL消息)记录到文件中,以供以后分析。
11.2.3  Filter

Filter(过滤器)用于提供额外的控制,以控制哪些日记记录从logger传递到Handle。
默认情况下,将处置惩罚所有符合日记级别要求的日记消息。但是,通过安装过滤器可以在日记记录过程中放置其他条件。比方,可以安装一个过滤器,该过滤器仅允许发出来自特定来源的ERROR消息。
过滤器还可以用于在发出之前修改日记记录。比方,可以编写一个过滤器,假如满足一组特定的条件,则将ERROR日记记录降级为WARNING记录。
过滤器可以安装在Logger或Handle上,在一个链中可以使用多个过滤器来执行多个过滤操作。
11.2.4  Formatter

最终的日记记录必要呈现为文本,而格式器(Formatter)描述了该文本简直切格式。格式化步伐通常由包含LogRecord属性的Python格式化字符串组成。不外,也可以编写自定义格式化步伐,以实现特定的格式化行为。
11.2.5  使用日记记录

使用日记记录的方法很简单,在Django项目的配置文件setting.py中配置好Logger、Handle、Filter和Formatters后,就可以将必要的日记记录的调用放入代码中。下面是几个比较常用的代码实例。
第一个是一个相对简单的配置,用于将Django框架的Logger中的所有日记记录写入本地文件。
【代码11-7】
  1. 01  LOGGING = {
  2. 02      'version': 1,
  3. 03      'disable_existing_loggers': False,
  4. 04      'handlers': {
  5. 05          'file': {
  6. 06              'level': 'DEBUG',
  7. 07              'class': 'logging.FileHandler',
  8. 08              'filename': 'debug.log',
  9. 09          },
  10. 10      },
  11. 11      'loggers': {
  12. 12          'django': {
  13. 13              'handlers': ['file'],
  14. 14              'level': 'DEBUG',
  15. 15              'propagate': True,
  16. 16          },
  17. 17      },
  18. 18  }
复制代码
第二个是一个相对完整的配置,包括Logger、Handle、Filter和Formatter的全部配置信息。
【代码11-8】
  1. 01  LOGGING = {
  2. 02      'version': 1,
  3. 03      'disable_existing_loggers': False,
  4. 04      'formatters': {
  5. 05          'verbose': {
  6. 06    'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d
  7. %(message)s'
  8. 07          },
  9. 08          'simple': {
  10. 09              'format': '%(levelname)s %(message)s'
  11. 10          },
  12. 11      },
  13. 12      'filters': {
  14. 13          'special': {
  15. 14              '()': 'project.logging.SpecialFilter',
  16. 15              'foo': 'bar',
  17. 16          },
  18. 17          'require_debug_true': {
  19. 18              '()': 'django.utils.log.RequireDebugTrue',
  20. 19          },
  21. 20      },
  22. 21      'handlers': {
  23. 22          'console': {
  24. 23              'level': 'INFO',
  25. 24              'filters': ['require_debug_true'],
  26. 25              'class': 'logging.StreamHandler',
  27. 26              'formatter': 'simple'
  28. 27          },
  29. 28          'mail_admins': {
  30. 29              'level': 'ERROR',
  31. 30              'class': 'django.utils.log.AdminEmailHandler',
  32. 31              'filters': ['special']
  33. 32          }
  34. 33      },
  35. 34      'loggers': {
  36. 35          'django': {
  37. 36              'handlers': ['console'],
  38. 37              'propagate': True,
  39. 38          },
  40. 39          'django.request': {
  41. 40              'handlers': ['mail_admins'],
  42. 41              'level': 'ERROR',
  43. 42              'propagate': False,
  44. 43          },
  45. 44          'myproject.custom': {
  46. 45              'handlers': ['console', 'mail_admins'],
  47. 46              'level': 'INFO',
  48. 47              'filters': ['special']
  49. 48          }
  50. 49      }
  51. 50  }
复制代码
这个Logger配置完成了以下工作:
(1)将配置标识为dictConfig版本(version=1)。目前,这是唯一的dictConfig格式版本。
(2)定义了两个Formatter。


  • 简单信息:仅输出日记级别名称(比方DEBUG)和日记消息。格式字符串是普通的Python格式字符串,描述了将在每条记录行上输出的详细信息。可在Formatter对象中找到可以输出的详细信息的完整列表。
  • 详细信息:输出日记级别名称、日记消息、生成日记消息的时间、进程、线程和模块。
(3)定义了两个Filters。


  • project.logging.SpecialFilter:使用特殊别名。假云云过滤器必要其他参数,则可以在过滤器配置字典中将它们作为其他关键字提供。
  • django.utils.log.RequireDebugTrue:当DEBUG为True时,会传递记录。
(4)定义了两个Handler。


  • 控制台:一个StreamHandler,它将任何INFO(或更高版本)消息输出到sys.stderr。该处置惩罚步伐使用简单的输出格式。
  • mail_admins:一个AdminEmailHandler,通过电子邮件将任何ERROR(或更高版本)消息发送到站点ADMINS。该处置惩罚步伐使用特殊的过滤器。
(5)配置了3个Logger。


  • django:该Logger将所有消息传递到控制台处置惩罚步伐。
  • django.request:该Logger将所有错误消息传递给mail_admins处置惩罚步伐。另外,该记录器被标记为不流传消息,这意味着Logger将不会处置惩罚写入django.request的日记消息。
  • myproject.custom:该Logger将所有信息传递到INFO或更高级别,还将特殊过滤器传递给两个处置惩罚步伐——控制台和mail_admins。这意味着所有INFO级别的消息(或更高级别)将被打印到控制台,错误和严重消息也将通过电子邮件输出。
下面通过一个代码实例演示一下Logger的用法。起首,新建一个简单Django项目MyLogSite,然后创建一个简单的视图,通过该视图输出日记信息。具体代码如下:
【代码11-9】(详见源代码MyLogSite项目中的MyLogSite/views.py文件)
  1. 01  from django.http import HttpResponse
  2. 02  
  3. 03  import logging
  4. 04  logger = logging.getLogger('django')
  5. 05  
  6. 06  def index(request):
  7. 07      logger.info('info')
  8. 08      logger.error('error')
  9. 09      logger.warn('warn')
  10. 10      logger.debug('debug')
  11. 11      return HttpResponse("This is homepage!")
复制代码
【代码分析】
在第03行代码中,通过import关键字引入了logging对象。
在第04行代码中,通过logging对象调用getLogger('django')方法获取logger对象。
在第06~11行代码定义的视图函数中,通过logger对象分别调用info()方法、error()方法、warn()方法和debug()方法输出日记信息。
末了,在项目配置文件settings.py中配置logger信息,具体代码如下:
【代码11-10】(详见源代码MyLogSite项目中的MyLogSite/settings.py文件)
  1. 01  BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
  2. 02
  3. 03  LOGGING = {
  4. 04      'version': 1,
  5. 05      'disable_existing_loggers': False,
  6. 06      'handlers': {
  7. 07          'file': {
  8. 08              'level': 'DEBUG',
  9. 09              'class': 'logging.FileHandler',
  10. 10              'filename': os.path.join(BASE_LOG_DIR, 'opt.log'),
  11. 11          },
  12. 12      },
  13. 13      'loggers': {
  14. 14          'django': {
  15. 15              'handlers': ['file'],
  16. 16              'level': 'DEBUG',
  17. 17              'propagate': True,
  18. 18          },
  19. 19      },
  20. 20  }
复制代码
【代码分析】
在第01行代码中,配置了日记文件的输出目录BASE_LOG_DIR。注意,日记输出目录(logs)一般配置在项目根目录下。
第03~20行代码定义了Logger配置信息,与【代码11-7】基本同等。必要注意第10行代码中,通过前面定义的BASE_LOG_DIR参数指定了具体的日记信息文件opt.log。

面,演示一下Django项目中Logger日记的使用效果。起首,查看一下项目根目录下的logs目录情况,如图11.1所示。
然后,通过Firefox浏览器打开MyLogSite项目运行一下,如图11.2所示。页面中出现了提示信息,表示项目运行成功。
再查看一下项目根目录下的logs目录情况,如图11.3所示。


如图11.2中的箭头和标识所示,Logger日记信息文件opt.log已经生成了。下面我们打开该日记文件查看一下,如图11.4中的箭头和标识所示,固然Logger日记信息文件opt.log中输出了很多信息,但还是可以找到【代码11-9】中通过logger对象输出的调试信息。

图11.4  MyLogSite项目的日记信息(opt.log)文件




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表