python模块——logging(日志管理)

本文详细介绍了Python日志模块logging的使用方法,包括如何配置日志级别、创建日志记录器、设置日志处理器及输出日志信息。通过实例演示了如何将日志信息保存到文件中,并展示了不同日志级别的输出效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<wbr><wbr> 一般情况下,一些程序的调试过程中我们会让它输出一些信息,特别是一些大型的程序,我们通过这些信息可以了解程序的运行情况,python提供了一个日志模块logging,它可以把我们想要的信息全部保存到一个日志文件中,方面我们查看。我们先看一个简单的例子。 <p>&gt;&gt;&gt; import logging</p> <p>&gt;&gt;&gt; LOG_FILENAME="C:\Python25\log_test.txt"</p> <p>&gt;&gt;&gt; logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)</p> <p>&gt;&gt;&gt; logging.debug("This message should go to the log file")</p> <p><wbr><wbr><wbr>然后我们就可以在C盘python25目录下发现一个名为log_test.txt的文件,打开里面的内容为: <wbr><wbr><wbr>DEBUG:root:This message should go to the log file</wbr></wbr></wbr></wbr></wbr></wbr></p> <p><wbr><wbr><wbr>然后我们重复运行最后一句,会发现这个文本文件每次都会多出一行:DEBUG:root:This message should go to the log file</wbr></wbr></wbr></p> <p><wbr><wbr>下面我们看一个更标准的程序:</wbr></wbr></p> <p>&gt;&gt;&gt; import logging</p> <p>&gt;&gt;&gt; logger=logging.getLogger()</p> <p>&gt;&gt;&gt; handler=logging.FileHandler("Log_test.txt")</p> <p>&gt;&gt;&gt; logger.addHandler(handler)</p> <p>&gt;&gt;&gt; logger.setLevel(logging.NOTSET)</p> <p>&gt;&gt;&gt; logger.error("This is an error message")</p> <p>&gt;&gt;&gt; logger.info("This is an info message")</p> <p>&gt;&gt;&gt; logger.critical("This is a critical message")</p> <p><wbr><wbr><wbr>日志文件中会出现三行内容:</wbr></wbr></wbr></p> <p>This is an error message</p> <p>This is an info message</p> <p>This is a critical message</p> <p><wbr><wbr><wbr>上面程序的第2行是生成一个日志对象,里面的参数时日志的名字,可以带,也可以不带。第3行是生成了一个handler,logging支持很多种Handler,像FileHandler,SocketHandler等待,这里由于我们要写文件,所以用了FileHandler,它的参数就是filename,默认当前路径,当然我们可以自己指定路径。</wbr></wbr></wbr></p> <p><wbr><wbr><wbr>第5行设置日志信息输出的级别。Logging提供了多种日志级别,如NOTSET,DEBUG,INFO,WARNING,ERROR,CRITICAL等,每个级别都对应一个数值,如果我们不自己设置输出级别,那么系统会执行缺省级别,值为30,就warning。Logging也提供了一个方法来查看缺省日志级别,getLevelName(logger,getEffectiveLevel())。</wbr></wbr></wbr></p> <p><wbr><wbr><wbr><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=4b5039210100f1wv&amp;url=http://s5.sinaimg.cn/orignal/4b50392147449518bd214&amp;690" target="_blank"><img title="python模块鈥斺攍ogging(日志管理)" alt="python模块鈥斺攍ogging(日志管理)" src="http://s5.sinaimg.cn/bmiddle/4b50392147449518bd214&amp;690"></a></wbr></wbr></wbr></p> <p><wbr></wbr></p> <p><wbr><wbr><wbr>日志对象对于不同的级别信息提供不同的函数进行输出,如:info(), error(), debug()等。当写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息。系统默认的日志级别排序为,CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET。比如说我们要输出的信息为CRITICAL,但是我们的日志级别为DEBUG,那么这个信息将被忽略掉。我们看下面的例子:</wbr></wbr></wbr></p> <p>import logging</p> <p>import sys</p> <p>LEVELS={'debug':logging.DEBUG,</p> <p><wbr><wbr><wbr><wbr><wbr><wbr>'info':logging.INFO,</wbr></wbr></wbr></wbr></wbr></wbr></p> <p><wbr><wbr><wbr><wbr><wbr><wbr>'warning':logging.WARNING,</wbr></wbr></wbr></wbr></wbr></wbr></p> <p><wbr><wbr><wbr><wbr><wbr><wbr>'error':logging.ERROR,</wbr></wbr></wbr></wbr></wbr></wbr></p> <p><wbr><wbr><wbr><wbr><wbr><wbr>'critical':logging.CRITICAL}</wbr></wbr></wbr></wbr></wbr></wbr></p> <p><wbr></wbr></p> <p>if len(sys.argv)&gt;1:</p> <p><wbr><wbr><wbr>level_name=sys.argv[1]</wbr></wbr></wbr></p> <p><wbr><wbr><wbr>level=LEVELS.get(level_name,logging.NOTSET)</wbr></wbr></wbr></p> <p><wbr><wbr><wbr>logging.basicConfig(level=level)</wbr></wbr></wbr></p> <p><wbr></wbr></p> <p>logging.debug("This is a debug message")</p> <p>logging.info("This is an info message")</p> <p>logging.warning("This is a warning message")</p> <p>logging.error("This is an error message")</p> <p>logging.critical("This is a critical error message")</p> <p><wbr><wbr><wbr>运行时候,我们根据给的参数时debug,info等等,来看看输出情况,就可以知道各个日志级别的输出情况了,下面是结果:</wbr></wbr></wbr></p> <p><wbr></wbr></p> <p><wbr><wbr><wbr><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=4b5039210100f1wv&amp;url=http://s5.sinaimg.cn/orignal/4b5039214744952a6e2c4&amp;690" target="_blank"><img title="python模块鈥斺攍ogging(日志管理)" alt="python模块鈥斺攍ogging(日志管理)" src="http://s5.sinaimg.cn/bmiddle/4b5039214744952a6e2c4&amp;690"></a></wbr></wbr></wbr></p> <p><wbr><wbr><wbr>可以看到过滤进行的很明显。当我们设置级别最低位debug时,所有的信息都输出了,当我们设为最高位critical时候,只有critical输出了,低于critical的被过滤了。</wbr></wbr></wbr></p> <p><wbr><wbr><wbr>Logging是非常有用的,一个程序的健壮性也这个有关,当一个程序包含很多的调试信息时,可以方便我们发现问题,发现错误。</wbr></wbr></wbr></p> </wbr></wbr>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值