Django使用Python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍Django中的日志系统。
日志配置包括四个部分:格式器(formatters),过滤器(filters),处理器(handlers),记录器(loggers),下面我们来一一讲解。
控制日志输出的格式,格式使用python的字符串控制格式。
属性格式描述asctime%(asctime)s日志产生的时间,默认格式为2003-07-08 16:49:45,896created%(created)ftime.time()生成的日志创建时间戳filename%(filename)s生成日志的程序名funcName%(funcName)s调用日志的函数名levelname%(levelname)s日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')levelno%(levelno)s日志级别对应的数值lineno%(lineno)d日志所针对的代码行号(如果可用的话)module%(module)s生成日志的模块名msecs%(msecs)d日志生成时间的毫秒部分message%(message)s具体的日志信息name%(name)s日志调用者pathname%(pathname)s生成日志的文件的完整路径process%(process)d生成日志的进程ID(如果可用)processName%(processName)s进程名(如果可用)thread%(thread)d生成日志的线程ID(如果可用)threadName%(threadName)s线程名(如果可用)过滤器是用来提供额外的控制,控制哪些日志记录可以被传给处理器处理。
默认情况下,只要日志消息符合相应的等级要求就会传给对应的处理器处理,然而,通过安装过滤器,你可以在日志记录过程中设置额外的内容,例如,你可以安装一个过滤器使得某个源只有error级别的消息才会被发送。你也可以使用过滤器修改之前会被发送的消息,例如,你可以写一个过滤器使得符合某些条件的error等级的消息降级为warning等级。
过滤器可以给处理器和记录器使用,多个过滤器可以级联使用。
处理器是决定日志记录器中对应的实体消息发生了什么的引擎,描述了一个具体的日志行为,比如输出到屏幕,或者一个文件,抑或一个网络socket。
和记录器一样,没有到达相应等级的消息会被忽略。
一个记录器可以有多个处理器,一个处理器可以有不同的日志等级,因此你可以根据消息的重要性而提供不同的提示。
一个记录器是日志系统的一个实体,每一个记录器是一个已经命名好的可以将消息为进程写入的"容器"。
每一个记录器都会有一个日志等级,每个等级描述了记录器即将处理的信息的严重性,python定义了以下五个等级:
debug:出于调试目的的低层次系统信息
info:普通的系统信息warning:描述已经发生的小问题error:描述已经发生的主要问题critical:描述已经发生的严重问题每一条被写入记录器的信息成为一条日志记录,每条日志记录都有一个表明该记录严重性的日志等级,每条日志信息也会包含一些有用的元信息表明已经被记录的事件,比如栈追溯和错误代码。
当一条信息被发往记录器的时候,消息的记录等级会和记录器的等级相比较,如果符合甚至超越当前等级,则被发往处理器处理,否则会被忽略掉。
配置格式器,过滤器,处理器和记录器后,需要将日志记录调用放入代码中。使用日志框架非常简单,这是一个例子:
# import the logging library import logging # Get an instance of a logger logger = logging.getLogger(__name__) # 获得实例对象。__name__模块名,可以传入其他 def my_view(request, arg1, arg): ... if bad_mojo: # Log an error message logger.error('Something went wrong!')LOGGING_CONFIG=None,禁用。
django记录器是捕捉所有消息的记录器,没有消息是直接发往django记录器的,而是使用下面的记录器。
5XX会引发一个error消息,4XX会引发一个warning消息,这个记录器还附带有额外的上下文:
status_code:HTTP响应吗request:生成这个消息的request对象所有的由请求运行的sql语句都会记录一条debug的消息,每个记录器还附带有额外的上下文:
duration:sql语句运行的时间sql:运行的sql语句params:sql语句调用的参数处于网站运行的表现原因,仅当settings.DEBUG=True的时候,这个处理器才生效,否则即使配置了也无效。
这个过滤器接受一个回调函数(这个函数接受一个参数,被记录的信息),每个记录通过过滤器的时候都会调用这个回调函数,当回调函数返回False的时候,不处理这个记录。下面是一个示例:
from django.http import UnreadablePostError def skip_unreadable_post(record): if record.exc_info: exc_type, exc_value = record.exc_info[:2] if isinstance(exc_value, UnreadablePostError): return False return True 'filters': { 'skip_unreadable_posts': { '()': 'django.utils.log.CallbackFilter', 'callback': skip_unreadable_post, } }, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'filters': ['skip_unreadable_posts'], 'class': 'django.utils.log.AdminEmailHandler' } },此过滤器仅在settings.DEBUG为False时传递记录。
此过滤器仅当settings.DEBUG为True时传递记录。
至此,转载请注明出处。
[ 本站相关链接:>>Django部署 ]
转载于:https://www.cnblogs.com/wcwnina/p/8516785.html