python中logging的用法,python中logging
Python日志模块定义了为应用程序和库实现灵活事件日志记录的函数和类。
在程序开发过程中,很多程序都有记录日志的需求,而日志中包含的信息是正常程序可以访问的,可能会有错误、警告等信息输出。Python的日志模块提供了一个标准的日志接口,通过该接口可以存储各种格式的日志,日志提供了一组方便的函数,用于简单的日志使用。
使用Python日志模块的主要优点是所有Python模块都可以参与日志记录。日志模块提供了大量灵活的功能。日志记录函数是根据它们用来跟踪的事件的级别或严重性来命名的。下面描述了标准级别及其适用性(从最高到最低):
日志级别排名:严重错误警告信息调试
级别越高,打印的日志越少,反之亦然,即
Debug:打印所有日志(notset等同于debug )info:打印info、warning、error、critical level Warning:打印Warning、error和critical level Error的日志:打印Error、Critical log critical:打印critical level 1。日志模块日志模式日志模块提供两种日志模式:
一种方式是使用日志提供的模块级函数,另一种方式是使用日志系统的四个组件记录日志定义的模块级函数。
简单打印日志:
导入日志记录
#打印日志级别
def测试日志():
logging . debug(“Python调试”)
logging . info(“Python信息”)
logging . warning(“Python警告”)
logging . Error(“Python错误”)
logging . critical(“Python critical”)
Test_logging()输出结果:
警告:root:Python警告
错误:根:Python错误
CRITICAL:root:Python critical指定日志级别时,将记录大于或等于此日志级别的日志信息,小于此级别的日志信息将被丢弃。
默认情况下,日志打印仅显示大于或等于警告级别的日志。
设置日志显示级别可以通过logging.basicConfig()设置root的日志级别和日志输出格式。
Logging.basicConfig()关键字参数:
格式
注意:Logging.basicConfig()需要在开头设置,中间设置没有影响。
例子
导入日志记录
#打印日志级别
定义测试():
logging . basic config(level=logging。调试)
logging . debug(“Python调试”)
logging . info(“Python信息”)
logging . warning(“Python警告”)
logging . Error(“Python错误”)
logging . critical(“Python critical”)
logging.log(2,“测试”)
测试()输出:
调试:根:Python调试
信息:根:Python信息
警告:root:Python警告
错误:根:Python错误
CRITICAL:root:Python critical将日志信息记录到文件#将日志信息记录到文件
logging . basic config(filename= F:/example . log ,level=logging。调试)
logging.debug(此消息应转到日志文件)
logging.info(也应该这样)
logging . warning( And this too )对应路径下会有一个example.log日志文件,内容如下:
DEBUG:root:此消息应该转到日志文件中
INFO:root:这个应该也是
警告:root:还有这个,太多模块记录日志信息。如果程序包含多个模块,以下示例用于显示日志信息:
实例中有两个模块,一个模块通过导入另一个模块,用日志显示另一个模块的信息:
Myapp.py模块
导入日志记录
导入mylib
def main():
logging.basicConfig(文件名=myapp.log ,级别=日志。调试)
logging.info(Started )
mylib.do_something()
logging.info(已完成)
if __name__==__main__ :
Main()mylib.py模块
导入日志记录
def do_something():
Logging.info(Doing something )执行myapp.py模块会打印相应的日志,文件myapp.log中显示的信息如下:
信息:根:已开始
信息:根:做某事
Info: root: finish显示信息的日期并改变显示消息的格式。
显示消息日期
导入日志记录
#显示消息时间
logging . basic config(format= %(ASC time)s %(message)s )
logging.warning(是记录此事件的时间。)
logging . basic config(format= %(asctime)S %(message)S ,datefmt=%m/%d/%Y %I:%M:%S %p )
Logging.warning(是记录此事件的时间。)结果:
2019-10-16 18:57:45,988是记录此事件的时间。
2019-10-16 18: 57: 45,988是记录此事件的时间。更改显示消息格式
导入日志记录
#更改显示消息的格式
logging . basic config(format= %(level name)s:%(message)s ,level=logging。调试)
logging.debug(Python消息格式调试)
logging . Info(“Python消息格式信息”)
logging . Warning(“Python消息格式警告”)结果:
调试:Python消息格式调试
信息:Python消息格式信息
警告:Python消息格式警告注意:显示结果只显示级别和具体信息。之前显示的“根”已经消失,重新定义的格式修改了默认的输出方式。
2.测井模块的四个组件
Logger-LoggerLogger持有记录器的方法。记录器不是直接实例化的,而是通过模块级函数logger.getLogger (name)实例化的。多次使用相同的名称调用getlogger()总是返回对相同logger对象的引用。
应用程序代码可以直接调用日志接口。Logger最常见的操作有两种:配置和发送日志消息。初始化logger=logging . get logger(" Endless Code "),获取logger对象。getlogger()方法最好后跟要记录的模块的名称。配置文件和打印日志格式中的%(name)s对应于此处的模块名称,如果未指定名称,将返回根对象。Logger.setLevel(日志记录。调试),日志记录有几个级别:不设置调试信息警告错误严重。日志将记录高于设置级别的日志。使用同一个名称多次调用getLogger方法,返回同一个looger对象;记录器是一个树形层次结构。在使用接口debug、info、warn、error、critical之前,您必须创建一个记录器实例:
创建方法:Logger=logging . get Logger(Logger _ name)创建Logger实例后,可以使用以下方法设置日志级别并增加处理器处理程序:
Logger.setlevel(日志记录。error) #将日志级别设置为ERROR,即只有日志级别大于或等于ERROR的日志才会输出logger . addhandler(handler _ name)#添加处理器Logger . remove handler(handler _ name)#删除Logger实例的处理器。处理器有很多种类型。有三种常用的处理器:StreamHandler、FileHandler和NullHandler。
流处理器
方法:sh=logging . stream handler(stream=none)
创建StreamHandler后,您可以使用以下方法设置日志级别、设置格式化程序以及添加或删除过滤器筛选器:
你书房里的问题没人回答?边肖创建了一个Python学习交流QQ群:857662006。
找志同道合的朋友互相帮助,群里也有不错的视频学习教程和PDF电子书!
Ch.setLevel(日志记录。WARN) #指定日志级别,低于WARN级别的日志将被忽略。
ch . Set formatter(formatter _ name)#设置一个格式化程序formatter。
Ch.addFilter(filter_name) #添加一个过滤器,可以添加多个。
ch . remove filter(filter _ name)# Delete a filter filter-filter handlers和Loggers可以使用过滤器来完成比级别更复杂的过滤。
过滤器基类只允许低于特定记录器级别的事件。
例如,用“a.b”初始化的筛选器允许记录诸如“a.b”、“a.b.c”、“a.b.c.d”和“a.b.d”之类的事件,但不允许记录诸如“a.bb”和“b.a.b”之类的事件。如果用空字符串初始化,则接受所有事件。
创建方法:过滤器=日志。filter(name= )Formatter-Formatter使用Formatter对象来设置日志信息的最终规则、结构和内容。默认的时间格式是% y-%m-%d% h:% m:% s。
创建方法:formatter=logging . formatter(fmt=none,datefmt=none),其中fmt是消息的格式化字符串,datefmt是日期字符串。如果未指定fmt,将使用“%(消息)s”。如果未指定datefmt,将使用ISO8601日期格式。
组件之间的关联日志记录器需要通过一个处理器将日志信息输出到一个目标位置,不同的处理器可以将日志输出到不同的位置;Logger可以设置多个处理器将同一个日志记录输出到不同的位置;每个处理程序可以设置自己的过滤器来过滤日志,以便只保留感兴趣的日志。每个处理程序可以设置自己的格式化程序,以不同的格式将相同的日志输出到不同的位置。简单来说,日志者就是入口,处理者才是真正起作用的。处理程序可以通过过滤器和格式化程序过滤和格式化要输出的日志内容。
Logger可以包含一个或多个处理程序,FilterLogger与处理程序或过滤器有一对多的关系。一个Logger实例可以添加多个处理程序,一个处理程序可以添加多个格式化程序或过滤器,日志级别将被继承。二。记录工作流1。日志模块使用流程1)第一次导入日志模块或者使用reload函数重新导入日志模块时,会执行日志模块中的代码,在这个过程中会生成日志系统的默认配置。
2)自定义配置(可选)。日志标准模块支持三种配置方式:dictConfig、fileConfig和listen。其中,dictConfig是记录器、处理器、过滤器和格式化程序;由字典配置;fileConfig是由文件配置的;Listen监视网络端口,并通过接收网络数据对其进行配置。当然,除了以上集体化配置,还可以直接调用Logger、Handler等对象中的方法,在代码中显式配置。
3)在日志模块的全局范围内使用getLogger函数获取一个Logger对象实例(其参数是一个字符串,表示Logger对象实例的名称,即通过这个名称获取对应的Logger对象实例)。
4)使用Logger对象中的debug、info、error、warn、critical方法来记录日志信息。2.测井模块的处理流程
流程描述:
判断日志的级别是否大于Logger对象的级别,如果是,则向下执行,否则,流程结束。生成日志:第一步,判断是否有异常,如果有,添加异常信息。
第二步是处理日志方法中的占位符(如debug、info等)。),也就是一般的字符串格式化。使用Logger对象中注册的过滤器进行过滤。如果有多个过滤器,则按顺序过滤;只要有一个过滤器返回false,则过滤结束,日志信息将被丢弃,不做处理,处理流程到此结束。否则,处理流程会停止。在当前Logger对象中查找处理程序,如果找不到任何处理程序,则转到该Logger对象的父Logger;如果找到一个或多个处理程序,日志信息将由处理程序依次处理。但是,在每个处理程序处理日志信息的过程中,它会首先确定日志信息的级别是否大于处理程序的级别。如果是,则向下执行(Logger对象进入Handler对象),否则,处理流程结束。执行Handler对象中的filter方法,这将依次执行Handler对象中注册的过滤器。如果有一个过滤器判断日志信息为假,后续所有过滤器都不会执行,直接丢弃日志信息,处理流程结束。使用Formatter类格式化最终输出。注意:格式化程序不同于上面步骤2中的字符串格式化。它将添加额外的信息,例如日志生成的时间、生成日志源代码的源文件的路径等等。真正输出日志信息(到网络,文件,终端,邮件等。).至于输出哪个目的地,由处理程序的种类决定。三。配置日志程序员可以通过三种方式配置日志:
1、使用配置方法的计算机编程语言代码显式创建记录器,处理程序和格式化程序。
2、创建日志记录配置文件并使用该文件配置()功能读取它。
3、创建配置信息字典并将其传递给字典配置()函数。
下面使用计算机编程语言代码配置一个非常简单的记录器,一个控制台处理程序和一个简单的格式化程序:
记录日志。主配置文件配置文件:
[伐木工人]
密钥=根,简单示例
[经手人]
密钥=控制台处理器
[格式化程序]
密钥=简单格式化程序
[logger_root]
级别=调试
处理者=控制台处理者
[logger_simpleExample]
级别=调试
处理者=控制台处理者
质量名称=简单示例
传播=0
[处理程序_控制台处理程序]
级别=调试
格式化程序=简单格式化程序
args=(sys.stdout,)
[格式化程序_简单格式化程序]
format=%(ASC时间)s-%(名称)s-%(级别名称)s-%(消息)s
datefmt=config_logging.py配置器:
学习中遇到问题没人解答?小编创建了一个计算机编程语言学习交流即时通信软件群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和便携文档格式电子书!
导入日志记录
#创建记录器
logger=日志记录。获取记录器( simple _ example )
logger.setLevel(日志记录。调试)
#创建控制台处理程序并将级别设置为调试
ch=记录StreamHandler()
ch.setLevel(日志记录。调试)
#创建格式化程序
格式化程序=记录。格式化程序( %(asctime)s-%(名称)s-%(级别名称)s-%(消息)s )
#将格式化程序添加到荣誉勋爵
ch.setFormatter(格式化程序)
#将荣誉勋爵添加到记录器
logger.addHandler(ch)
#"应用程序"代码
logger.debug("调试消息")
logger.info("信息消息")
logger.warning("警告消息")
logger.error(错误消息)
记录器。关键("关键消息")记录器记录器:
导入日志记录
导入日志记录。配置
伐木。配置。文件配置(日志记录。conf’)
#创建记录器
logger=日志记录。获取记录器(“简单示例”)
#"应用程序"代码
logger.debug("调试消息")
logger.info("信息消息")
logger.warning("警告消息")
logger.error(错误消息)
logger.critical("关键消息")运行结果:
2019-10-16 19:45:34,440 -简单_示例-调试-调试消息
2019-10-16 19:45:34,440 - simple_example - INFO - info消息
2019-10-16 19:45:34,440 -简单_示例-警告-警告消息
2019-10-16 19:45:34,440 -简单_示例-错误-错误消息
2019-10-16 19:45:34,441 -简单_示例-关键-关键消息
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。