Django(37)配置django日志

  django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。
  logging主要由4部分组成:Loggers、Handlers、Filters和Formatters
 

settings中完整的配置

如果想自定义配置日志信息,我们可以在settings.py文件中配置,那配置的格式是怎么样的呢?我们可以通过from django.utils.log import DEFAULT_LOGGING查看Django中默认的日志配置信息,然后依葫芦画瓢即可

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'incremental':True, 'filters': {}, 'formatters': {}, 'handlers': {}, 'loggers': {} }

上述是默认的日志配置信息的格式,我们依次介绍

version:配置信息的版本

disable_existing_loggers:默认为True,True:设置已存在的logger失效。False:让已存在的logger不失效,保证日志信息完整。一般情况下设置为False

incremental:默认为False。True:是将配置解释为现有配置的增量。False:配置会覆盖已有默认配置。一般此项不用配置

filter:过滤器

formatters:格式器

handlers:处理器

loggers:日志器
 

Formatters

  日志记录最终需要呈现为文本,formatter程序描述该文本的确切格式。formatter通常由包含LogRecord属性的Python格式化字符串组成 ; 但是,也可以编写自定义formatter来实现特定的格式化行为。
 

1.settings中配置:

3个参数(具体看后面的Formatter类):

():指定格式器的类,不指定的话,默认使用logging.Formattr。一般用默认即可

format:格式化字符串

style:样式选择

datefmt:日期格式化字符串,使用的是python中时间日期格式化符号

案例

LOGGING = { 'formatters': { 'verbose': { '()': 'logging.Formatter', 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {message}', 'style': '{', }, } }

配置了2个格式器:

simple:只输出简单的:日志级别名称 日志消息

verbose:输出:日志级别名称 生成日志消息的时间 模块 进程 线程 日志消息
 

2.内置格式器

Formatter:默认格式器,初始化参数:fmt=None, datefmt=None,

fmt:格式化字符串,指定输出格式,如:'{levelname}{process:d}{message}'

datefmt:日期格式化字符串,为None则使用ISO8601格式化,如:'2010-01-01 08:03:26,870'

style:'%','{' 或 '$',3选一:

'%':默认是这个,使用python的%格式化 , 如: %(levelname)s

'{':使用 str.format格式化(django框架使用这个), 如:{levelname}

'$':使用类string.Template格式化,如:\$levelname

格式化字符串的种类

%(name)s:记录器logger的名称 %(levelno)s:日志级别对应的数字 %(levelname)s:日志级别名称 %(pathname)s:日志记录调用的源文件的完整路径 %(filename)s:日志记录调用的源文件名 %(module)s:模块名 %(lineno)d:日志调用的行数 %(funcName)s:函数名 %(created)f:日志创建时间,time.time() %(asctime)s:日志创建时间,文本类型 %(msecs)d:日志创建时间的毫秒部分 %(relativeCreated)d:日志创建时间 - 加载日志模块的时间 的 毫秒数 %(thread)d:线程ID %(threadName)s:线程名 %(process)d:进程ID %(processName)s:进程名 %(message)s:日志消息

 

Filters

过滤器filter用于提供对日志记录从logger传递到handler的附加控制
​默认情况下,logger和handler将处理满足日志级别要求的任何日志消息,但是,通过安装filter,可以在日志记录过程中添加其他条件。例如,可以安装仅允许ERROR级别 来自特定源的消息的filter。
​filter还可用于在发出之前修改日志记录。例如,如果满足一组特定条件,可以编写一个过滤器,将ERROR日志记录降级为WARNING记录。
​filter可以安装在logger或handler上; 可以在链中使用多个filter来执行多个过滤操作。
 

1.settings中配置 LOGGING = { 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse', }, 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, }

配置了2个过滤器

require_debug_false:使用类:RequireDebugFalse

require_debug_true:使用类:RequireDebugTrue
 

Handlers

  这个类是确定logger中消息发生的引擎程序,描述特定的日志记录行为,譬如控制台打印、写入日志文件、通过网络进行发送等
  与logger一样,handler也具有日志级别,如果日志记录的日志级别未达到或超过handler的级别,则handler将忽略该消息。
  一个logger可以有多个handler,每个handler可以有不同的日志级别和记录方法
 

1.settings中配置

4个参数(如下),加上对应class类的初始化参数

class(必需):处理程序类的名称

level(可选的):处理程序的级别

formatter(可选的):处理程序的格式化程序

filters(可选的):处理程序的过滤器的列表
 

2.内置处理器

python3的logging中的handler:

StreamHandler:输出到stream,未指定则使用sys.stderr输出到控制台

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjggx.html