1. Django 日志
  2. Django 使用Python 内建的logging 模块打印日志,Python logging 配置由四个部分组成:
  3. 记录器 —— Logger
  4. 处理程序 —— Handler
  5. 过滤器 —— Filter
  6. 格式化 —— Formatter
1.记录器 —— Logger
Logger 为日志系统的入口。每个logger命名都是bucket,你可以向这个bucket写入需要处理的消息。
每个logger 都有一个日志级别。日志级别表示该logger 将要处理的消息的严重性。Python
定义以下几种日志级别:
DEBUG:用于调试目的的底层系统信息
INFO:普通的系统信息
WARNING:表示出现一个较小的问题。
ERROR:表示出现一个较大的问题。
CRITICAL:表示出现一个致命的问题。
写入logger 的每条消息都是一条日志。每条日志也具有一个日志级别,它表示对应的消息的严重性。每个日志记录还可以包含描述正在打印的事件的元信息。
当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。如果消息的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。如果小于,该消息将被忽略。
Logger 一旦决定消息需要处理,它将传递该消息给一个Handler。
  1.  

2.Logger配置

logger 对应的值是个字典,其每一个键都是logger的名字,每一个值又是个字典,描述了如何配置对应的Logger实例。
- level (可选的)。logger的级别。
- propagate (可选的)。logger的传播设置。
- flters (可选的)。logger的Òlter的标识符的列表。
- handlers (可选的)。logger的handler的标识符的列表。
 
LOGGING = {
  'loggers': {
    'reboot': {
      'handlers': ['file_handler', 'console_handler'],
      'level': 'DEBUG',
     },
   },
}3.处理程序 —— Handler
Handler 决定如何处理logger 中的每条消息。它表示一个特定的日志行为,例如将消息写
到屏幕上、写到文件中或者写到网络socket
与logger 一样,handler 也有一个日志级别。如果消息的日志级别小于handler 的级别,
handler 将忽略该消息
Logger 可以有多个handler,而每个handler 可以有不同的日志级别。利用这种方式,可以
根据消息的重要性提供不同形式的处理
  1. 5.格式化——Formatters
最后,日志记录需要转换成文本。Formatter 表示文本的格式。Fomatter 通常由包含日志记录
属性的Python 格式字符串组成;你也可以编写自定义的fomatter 来实现自己的格式
LOGGING = {
  'formatters': {
    'reboot':{
      'format': '%(asctime)s - %(pathname)s:%(lineno)d[%(levelname)s] - %(message)s'
    }
    'simple': {
      'format': '%(asctime)s %(levelname)s %(message)s'
    },
  },
}

6.Django 内置logger

django 获取所有日志
django.request 处理与请求相关的日志,5xx响应报出error日志,4xx报出WARNING日志
django.db.backends 处理与数据库之间交互的日志,
django.security.* 处理与安全相关的日志
django.db.backends.schemea 处理数据库迁移时的日志 

示例:django中的log需要在settings.py中配置

  1. import time
  2.  
  3. cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路径
  4. log_path = os.path.join(os.path.dirname(cur_path), 'logs')
  5. if not os.path.exists(log_path): os.mkdir(log_path) # 如果不存在这个logs文件夹,就自动创建一个
  6.  
  7. LOGGING = {
  8. 'version': 1,
  9. 'disable_existing_loggers': True,
  10. 'formatters': {
  11. # 日志格式
  12. 'standard': {
  13. 'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
  14. '[%(levelname)s]- %(message)s'},
  15. 'simple': { # 简单格式
  16. 'format': '%(levelname)s %(message)s'
  17. },
  18. },
  19. # 过滤
  20. 'filters': {
  21. },
  22. # 定义具体处理日志的方式
  23. 'handlers': {
  24. # 默认记录所有日志
  25. 'default': {
  26. 'level': 'INFO',
  27. 'class': 'logging.handlers.RotatingFileHandler',
  28. 'filename': os.path.join(log_path, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
  29. 'maxBytes': 1024 * 1024 * 5, # 文件大小
  30. 'backupCount': 5, # 备份数
  31. 'formatter': 'standard', # 输出格式
  32. 'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
  33. },
  34. # 输出错误日志
  35. 'error': {
  36. 'level': 'ERROR',
  37. 'class': 'logging.handlers.RotatingFileHandler',
  38. 'filename': os.path.join(log_path, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
  39. 'maxBytes': 1024 * 1024 * 5, # 文件大小
  40. 'backupCount': 5, # 备份数
  41. 'formatter': 'standard', # 输出格式
  42. 'encoding': 'utf-8', # 设置默认编码
  43. },
  44. # 控制台输出
  45. 'console': {
  46. 'level': 'DEBUG',
  47. 'class': 'logging.StreamHandler',
  48. 'formatter': 'standard'
  49. },
  50. # 输出info日志
  51. 'info': {
  52. 'level': 'INFO',
  53. 'class': 'logging.handlers.RotatingFileHandler',
  54. 'filename': os.path.join(log_path, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
  55. 'maxBytes': 1024 * 1024 * 5,
  56. 'backupCount': 5,
  57. 'formatter': 'standard',
  58. 'encoding': 'utf-8', # 设置默认编码
  59. },
  60. },
  61. # 配置用哪几种 handlers 来处理日志
  62. 'loggers': {
  63. # 类型 为 django 处理所有类型的日志, 默认调用
  64. 'django': {
  65. 'handlers': ['default', 'console'],
  66. 'level': 'INFO',
  67. 'propagate': False
  68. },
  69. # log 调用时需要当作参数传入
  70. 'log': {
  71. 'handlers': ['error', 'info', 'console', 'default'],
  72. 'level': 'INFO',
  73. 'propagate': True
  74. },
  75. }
  76. }

脚本中调用views.py:

  1. import logging
  2.  
  3. logger = logging.getLogger('log')
 

八.django日志配置的更多相关文章

  1. 运维开发笔记整理-django日志配置

    运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...

  2. Django 日志配置

    Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...

  3. django-debug-toolbar和Django 日志配置

    django-debug-toolbar介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. gith ...

  4. Django 日志配置按日期滚动

    记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题. 配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tr ...

  5. 07.django日志配置

    https://docs.djangoproject.com/en/3.0/topics/logging/ https://yiyibooks.cn/xx/python_352/library/log ...

  6. 第五天.权限批量录入/更新、信号、Django日志配置

    1. 角色.菜单.权限的增删该查 1. ModelForm增删改查 2. 增加和编辑使用同一个视图函数 Form() 1. 生成获取用户输入的标签 2. 对用户输入的内容做校验 3. 保留输入的内容同 ...

  7. django日志配置

    直接参考这篇,很详细:https://www.cnblogs.com/changqing8023/p/9639769.html 补充一点:日志文件打开时,中文乱码,要在handler中设置编码格式,' ...

  8. 第十三篇Django Logging配置样例

    第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...

  9. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪

    试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...

  2. Java实现 LeetCode 475 供暖器

    475. 供暖器 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房 ...

  3. Java实现 蓝桥杯VIP 算法训练 统计字符次数

    算法训练 统计字符次数 时间限制:1.0s 内存限制:512.0MB 输入一个字符串(长度在100以内),统计其中数字字符出现的次数. 样例输入 Ab100cd200 样例输出 6 import ja ...

  4. Java实现蓝桥杯VIP 算法训练 矩阵乘方

    import java.util.Scanner; public class 矩阵乘方 { public static void main(String[] args) { Scanner scann ...

  5. Java实现 POJ 2749 分解因数(计蒜客)

    POJ 2749 分解因数(计蒜客) Description 给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * - * an,并且1 < a1 <= ...

  6. Java实现 蓝桥杯VIP 算法提高 格子位置

    算法提高 格子位置 时间限制:1.0s 内存限制:512.0MB 问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i ...

  7. Java实现LeetCode_0026_RemoveDuplicatesFromSortedArray

    package javaLeetCode.primary; public class RemoveDuplicatesFromSortedArray_26 { public static void m ...

  8. 阿里云专有网络配置以及交换机配置+ip、子网掩码、ip网段计算原理讲解

    在阿里云上购买ECS或者其他服务,如redis.polardb时,需要配置专有网络,阿里的文档写的总体上还是比较抽象的,没有一定的网络基础,会一脸懵. 所以这里我来进行专有网络和交换机的配置,以及ip ...

  9. Linux笔记(第二天)

    tail  -1  /etc/passwd 显示最后一行 一.用户类型: 超级用户:root 超级管理员 ID=0 普通用户:系统用户:uid:1~999(centos7) 1~499(centos6 ...

  10. MySql多表查询优化

    一.多表查询连接的选择 相信内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上,我就补贴出来了,这个图只是让大家熟悉一下各种连接查询.然后要告诉大家的是,需要根据查询的信息,想好 ...