django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。
logging主要由4部分组成:Loggers、Handlers、Filters和Formatters
如果想自定义配置日志信息,我们可以在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:日志器
日志记录最终需要呈现为文本,formatter程序描述该文本的确切格式。formatter通常由包含LogRecord属性的Python格式化字符串组成 ; 但是,也可以编写自定义formatter来实现特定的格式化行为。
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:输出:日志级别名称 生成日志消息的时间 模块 进程 线程 日志消息
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来执行多个过滤操作。
配置了2个过滤器
require_debug_false:使用类:RequireDebugFalse
require_debug_true:使用类:RequireDebugTrue
这个类是确定logger中消息发生的引擎程序,描述特定的日志记录行为,譬如控制台打印、写入日志文件、通过网络进行发送等
与logger一样,handler也具有日志级别,如果日志记录的日志级别未达到或超过handler的级别,则handler将忽略该消息。
一个logger可以有多个handler,每个handler可以有不同的日志级别和记录方法
4个参数(如下),加上对应class类的初始化参数
class(必需):处理程序类的名称
level(可选的):处理程序的级别
formatter(可选的):处理程序的格式化程序
filters(可选的):处理程序的过滤器的列表
python3的logging中的handler:
StreamHandler:输出到stream,未指定则使用sys.stderr输出到控制台