Django 使用Python内建的logging模块打印日志,python的looging配置由四个部分组成:
记录器-Logger 处理程序- Handler 过滤器-Filter 格式化-Formatter
记录器-Logger
Logger为日志系统的入口,每个logger的命名都是bucket,可以向这个bucket写入需要处理的消息。简而言之,打印每一条日志信息都是通过这个Logger处理
每个logger都有一个日志级别。日志级别表示该logger将要处理的消息严重性。 Python定义以下几种日志级别: DEBUG: 用于调试目的的底层系统消息 INFO: 普通的系统信息 WARNING : 表示出现一个较小的问题 ERROR: 表示大问题 CRITICAL : 表示出现一个致命的问题。
写入logger的每条消息都是一条日志。每条日志也具有一个日志级别,它表示对应的消息的严重性。每个日志记录还可以包含描述正在打印的事件的元信息。
当一条消息传递给logger时,消息的日志级别将于logger的日志级别进行比较。如果消息日志级别大于等于logger的日志级别,该消息将会往下继续处理,如果小于,该消息将被忽略。
Logger 一旦决定消息需要处理,它将传递该消息给一个Handler。
Logger日志级别
级别 | 值 | 描述 |
---|
CRITICAL | 50 | 关键错误/消息 | ERROR | 40 | 错误 | WARNING | 30 | 警告信息 | INFO | 20 | 通知消息 | DEBUG | 10 | 调试 | NOTSET | 0 | 无级别 |
每个输出的消息都会有自己的级别,它会与定义的logging定义的级别进行比较。大于等于就会处理,否则就会被忽略
logger对应的值是个字典,每一个键都是logger的名字,每一个值有是一个字典,描述了如何配置对应的Logger实例。
- level (可选)。 logger的级别
- propagate(可选)。 logger的传播设置
- filters(可选)。 logger的filter的标识符的列表
- handlers(可选)。 logger的handler的标识符列表。
LOGGIN= { ‘loggers’:{ ‘reboot’:{ ‘handlers’:[‘file_handler’,‘console_handler1’], ‘level’:‘DEBUG’, } } }
如果匹配到需要记录的日志,通过Handler进行处理 handler决定如何处理logger上的每条消息。它表示一个特定的日志行为,例如将消息输出到屏幕,文件或者网络socket 与logger一样,handler也有一个日志级别。如果消息的日志级别小于handler级别,handler将忽略该消息。 logger可以有多个handler,每个handler可以有不同的日志级别。利用这种方式,可以根据消息的重要性提供不同形式的处理
LOGGIN= { ‘handlers’:{ ‘reboot’:{ ‘level’:‘DEBUG’, ‘class’:‘logging.StreamHandler’, ‘formatter’:‘simple’, } } }
如果得到的日志级别是大于等于DEBUG,会交给loggers,然后交给里面对应的reboot,再匹配handlers中的reboot,如果日志级别大于等于loggers当中的级别就进行处理。
Filter用于对从logger传递给handler的日志进行额外的控制。 默认情况下,满足日志级别的任何消息都将被处理。通过安装一个filter,可以对日志处理添加额外的条件。例如配置一个filter,只允许处理来自特定源的EROR消息 Filters 还可以用于修改将要处理的日志记录的优先级。例如,如果日志记录满足特定条件,可以编写filter将日志记录从ERROR将为WARNING Filters 可以安装在logger上 或者 handler上;多个filter可以串联起来实现多层filter行为。
格式化-Formatters 日志记录需要转换成文本,Formatter表示文本的格式。Formatter通常包含日志记录属性的Python格式字符串组成;也可以编写自定义的formatter来实现自己的格式
handler中可以指定用什么方式输出日志,class: 表示指定用什么方式写入我们的日志。streamhandler 表示是写到console,还有很多方式。例如写到文件,写到内存,写到网络socket
定义格式
Django 日志
视图层不用额外配置,保持原貌
向上传播(propagate) 这个值默认是True,会按照模块向上传播。
. 左边代表父模块 ,右边代表子模块。日志传播会自动向上传播。例如schema会传到backends,传到db,传到django。
name 这也是个模块,就是当前的视图
root默认是输出到终端
开发环境全部在终端
生成环境全部在日志,并且是json格式
|