八.django日志配置

Posted dbslinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八.django日志配置相关的知识,希望对你有一定的参考价值。

Django 日志
 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 
记录? —— Logger 
处理程序 —— Handler 
过滤? —— Filter 
格式化 —— Formatter

1.记录? —— Logger
Logger 为日志系统的入口。每个logger命名都是bucket,你可以向这个bucket写入需要处理的消息。
每个logger 都有一个日志级别。日志级别表示该logger 将要处理的消息的严重性。Python
定义以下几种日志级别:
DEBUG:用于调试目的的底层系统信息
INFO:普通的系统信息
WARNING:表示出现一个较小的问题。
ERROR:表示出现一个较大的问题。
CRITICAL:表示出现一个致命的问题。
写入logger 的每条消息都是一条日志。每条日志也具有一个日志级别,它表示对应的消息的严重性。每个日志记录还可以包含描述正在打印的事件的元信息。
当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。如果消息的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。如果小于,该消息将被忽略。
Logger 一旦决定消息需要处理,它将传递该消息给一个Handler。
技术图片

 


 2.Logger配置

logger 对应的值是个字典,其每一个键都是logger的名字,每一个值又是个字典,描述了如何配置对应的Logger实例。
- level (可选的)。logger的级别。
- propagate (可选的)。logger的传播设置。
- flters (可选的)。loggerÒlter的标识符的列表。
- handlers (可选的)。loggerhandler的标识符的列表。
 
LOGGING = {
  ‘loggers‘: {
    ‘reboot‘: {
      ‘handlers‘: [‘file_handler‘, ‘console_handler‘],
      ‘level‘: ‘DEBUG‘,
     },
   },
}3.处理程序 —— Handler
Handler 决定如何处理logger 中的每条消息。它表示一个特定的日志行为,例如将消息写
到屏幕上、写到文件中或者写到网络socket
logger 一样,handler 也有一个日志级别。如果消息的日志级别小于handler 的级别,
handler 将忽略该消息
Logger 可以有多个handler,而每个handler 可以有不同的日志级别。利用这种方式,可以
根据消息的重要性提供不同形式的处理
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中配置

import time

cur_path = os.path.dirname(os.path.realpath(__file__))  # log_path是存放日志的路径
log_path = os.path.join(os.path.dirname(cur_path), logs)
if not os.path.exists(log_path): os.mkdir(log_path)  # 如果不存在这个logs文件夹,就自动创建一个

LOGGING = {
    version: 1,
    disable_existing_loggers: True,
    formatters: {
        # 日志格式
        standard: {
            format: [%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] 
                      [%(levelname)s]- %(message)s},
        simple: {  # 简单格式
            format: %(levelname)s %(message)s
        },
    },
    # 过滤
    filters: {
    },
    # 定义具体处理日志的方式
    handlers: {
        # 默认记录所有日志
        default: {
            level: INFO,
            class: logging.handlers.RotatingFileHandler,
            filename: os.path.join(log_path, all-{}.log.format(time.strftime(%Y-%m-%d))),
            maxBytes: 1024 * 1024 * 5,  # 文件大小
            backupCount: 5,  # 备份数
            formatter: standard,  # 输出格式
            encoding: utf-8,  # 设置默认编码,否则打印出来汉字乱码
        },
        # 输出错误日志
        error: {
            level: ERROR,
            class: logging.handlers.RotatingFileHandler,
            filename: os.path.join(log_path, error-{}.log.format(time.strftime(%Y-%m-%d))),
            maxBytes: 1024 * 1024 * 5,  # 文件大小
            backupCount: 5,  # 备份数
            formatter: standard,  # 输出格式
            encoding: utf-8,  # 设置默认编码
        },
        # 控制台输出
        console: {
            level: DEBUG,
            class: logging.StreamHandler,
            formatter: standard
        },
        # 输出info日志
        info: {
            level: INFO,
            class: logging.handlers.RotatingFileHandler,
            filename: os.path.join(log_path, info-{}.log.format(time.strftime(%Y-%m-%d))),
            maxBytes: 1024 * 1024 * 5,
            backupCount: 5,
            formatter: standard,
            encoding: utf-8,  # 设置默认编码
        },
    },
    # 配置用哪几种 handlers 来处理日志
    loggers: {
        # 类型 为 django 处理所有类型的日志, 默认调用
        django: {
            handlers: [default, console],
            level: INFO,
            propagate: False
        },
        # log 调用时需要当作参数传入
        log: {
            handlers: [error, info, console, default],
            level: INFO,
            propagate: True
        },
    }
}

脚本中调用views.py:

技术图片
import logging

logger = logging.getLogger(log)
记录? —— Logger
Logger 为日志系统的入口。每个logger命名都是bucket,你可以向这个bucket写入需要处
理的消息。
每个logger 都有一个日志级别。日志级别表示该logger 将要处理的消息的严重性。Python
定义以下几种日志级别:
DEBUG:用于调试目的的底层系统信息
INFO:普通的系统信息
WARNING:表示出现一个较小的问题。
ERROR:表示出现一个较大的问题。
CRITICAL:表示出现一个致命的问题。
写入logger 的每条消息都是一条日志。每条日志也具有一个日志级别,它表示对应的消息
的严重性。每个日志记录还可以包含描述正在打印的事件的元信息。
当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。如果消息
的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。如果小于,该消息将
被忽略。
Logger 一旦决定消息需要处理,它将传递该消息给一个Handler

 

以上是关于八.django日志配置的主要内容,如果未能解决你的问题,请参考以下文章

Django之八高级视图和URL配置

Django日志配置代码

Django日志配置代码

八Django学习之urls.py详细配置规则

Django日志配置

Django的日志如何配置?