记录器 Loggers

Django额外提供了几个其内建的logger。

django: 不要使用这个记录器,用下面的。这是一个被供起来的记录器,
django.request: 记录与处理请求相关的消息。5XX错误被记录为ERROR消息;4XX错误记录为WARNING消息。接收额外参数:status_code和request
django.server: 记录开发服务器下处理请求相关的消息。只用于开发阶段。
django.template: 记录与渲染模板相关的日志。
django.db.backends: 与数据库交互的代码相关的消息。
django.security: 记录任何与安全相关的错误。
django.security.csrf: 记录CSRF验证失败日志。
django.db.backends.schema: 记录查询导致数据库修改的日志。

处理器 Handlers

Django额外提供了一个handler,AdminEmailHandler。这个处理器将它收到的每个日志信息用邮件发送给站点管理员。

过滤器Filters

Django还额外提供两个过滤器。

CallbackFilter(callback)[source]:这个过滤器接受一个回调函数,并对每个传递给过滤器的记录调用它。如果回调函数返回False,将不会进行记录的处理。

RequireDebugFalse[source]: 这个过滤器只会在settings.DEBUG==False时传递。

配置

  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False, # 表示是否禁用所有的已经存在的日志配置
  4. 'formatters': { # 格式器
  5. 'verbose': { # 详细
  6. 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
  7. },
  8. 'standard': { # 标准
  9. 'format': '[%(asctime)s] [%(levelname)s] %(message)s'
  10. },
  11. },
  12. # handlers:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。file是写入到文件的方式,注意使用的class不同
  13. 'handlers': { # 处理器,在这里定义了两个个处理器
  14. 'console': {
  15. 'level': 'DEBUG',
  16. 'class': 'logging.StreamHandler',
  17. 'stream': 'ext://sys.stdout',
  18. # 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
  19. # 'stream': open('/home/aea/log/test.log','a'), #虽然成功了,但是并没有将所有内容全部写入文件,目前还不清楚为什么
  20. 'formatter': 'standard' # 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
  21. },
  22. 'file': {
  23. 'level': 'DEBUG',
  24. 'class': 'logging.FileHandler',
  25. 'filename': '/home/aea/log/jwt_test.log', # 这是将普通日志写入到日志文件中的方法,
  26. 'formatter': 'standard'
  27. },
  28. 'default': {
  29. 'level': 'DEBUG',
  30. 'class': 'logging.handlers.RotatingFileHandler',
  31. 'filename': '/home/aea/log/all.log', # 日志输出文件
  32. 'maxBytes': 1024 * 1024 * 5, # 文件大小
  33. 'backupCount': 5, # 备份份数
  34. 'formatter': 'standard', # 使用哪种formatters日志格式
  35. },
  36. # 上面两种写入日志的方法是有区别的,前者是将控制台下输出的内容全部写入到文件中,这样做的好处就是我们在views代码中的所有print也会写在对应的位置
  37. # 第二种方法就是将系统内定的内容写入到文件,具体就是请求的地址、错误信息等,小伙伴也可以都使用一下然后查看两个文件的异同。
  38. },
  39. 'loggers': { # log记录器,配置之后就会对应的输出日志
  40. # django 表示就是django本身默认的控制台输出,就是原本在控制台里面输出的内容,在这里的handlers里的file表示写入到上面配置的file-/home/aea/log/jwt_test.log文件里面
  41. # 在这里的handlers里的console表示写入到上面配置的console-/home/aea/log/test.log文件里面
  42. #### 'django': {
  43. 'handlers': ['console', 'file'],
  44. # 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
  45. 'level': 'DEBUG',
  46. 'propagate': True,
  47. },
  48. 'django.request ': {
  49. 'handlers': ['console', 'file'],
  50. 'level': 'WARNING', # 配合上面的将警告log写入到另外一个文件
  51. 'propagate': True,
  52. },
  53. 'django.db.backends': {
  54. 'handlers': ['file'], # 指定file handler处理器,表示只写入到文件
  55. 'level': 'DEBUG',
  56. 'propagate': True,
  57. },
  58. },
  59. }