logging的基础教程

一、日志是什么?

日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生。通过对日志的调用方便我们查询信息,追踪问题和调试维护。

二、为什么使用日志?

在写程序的时候,我们会写很多print来调试程序,验证正确后往往会注释掉。一旦验证的地方比较多,再注释就相对麻烦,这时候使用logging就很方便,直接把验证信息存在一个文件中。

1.事件等级

日志功能应以所追踪事件级别或严重性而定。各级别适用性如下(以严重性递增):

级别何时使用
DEBUG细节信息,仅当诊断问题时适用。
INFO确认程序按预期运行。
WARNING表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行。
ERROR由于严重的问题,程序的某些功能已经不能正常执行
CRITICAL严重的错误,表明程序已不能继续执行

默认的级别是 WARNING,意味着会追踪该级别及以上的事件,则默认追踪(WARNING ,ERROR 和CRITICAL )

2.简单例子

import logging
logging.info('info')
logging.warning('warning')
'''
命令行中的输入结果:
WARNING:root:warning
'''

可以发现命令行的INFO 消息并没有出现,因为默认级别是 WARNING。会忽略DEBUG和INFO级别的消息。

3.记录日志到文件

import logging
log_filename = 'D:\\Jupyter_Workspace\\log\\log.txt'
logging.basicConfig(filename=log_filename, encoding='utf-8', level=logging.DEBUG)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')

此时我们的命令行将不会有输出,打开日志文件log.txt如下
在这里插入图片描述由于我们设置的阈值是 DEBUG,所有等级的信息都将被打印。对 basicConfig() 的调用应该在 debug() , info() 等之前。例如我们接着上面代码改变配置,并多次运行以下代码

logging.basicConfig(filename=log_filename, encoding='utf-8', level=logging.INFO)
logging.info('==============')
logging.debug('debug')
logging.info('info')

我们发现在日志中还是会输出debug的消息,即使我们将配置等级更改为INFO。因为它被设计为一次性的配置,只有第一次调用会进行操作,随后的调用不会产生有效操作。即logging的等级依然是第一次配置的DEBUG。
在这里插入图片描述
连续运行的消息将追加到文件log.txt中。如果你希望每次运行重新开始,而不是记住先前运行的消息,则可以通过将上例中的调用更改为指定 filemode 参数:

logging.basicConfig(filename=log_filename, filemode='w', level=logging.DEBUG)
logging.info('***************')
logging.debug('debug')
logging.info('info')
logging.info('***************')
logging.debug('debug')
logging.info('info')
logging.debug('debug')
logging.info('***************')

更改显示消息的格式

logging.basicConfig(filename=log_filename,format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.info('###############')
logging.debug('debug')
logging.info('info')

在这里插入图片描述
可以发现指定格式后日志中的root消失了,只显示levelname和message。对于可以出现在格式字符串中的全部内容,你可以参考
消息中显示日期/时间
显示事件的日期和时间,你可以在格式字符串中放置 ‘%(asctime)s’

logging.basicConfig(filename=log_filename,filemode='w',
                    format='%(asctime)s %(levelname)s: %(message)s',
                    level=logging.DEBUG)
logging.info('@@@@@@@@@@@')
logging.debug('debug')
logging.info('info')
"""
日志中的输入结果:
2022-03-30 11:05:39,613INFO:@@@@@@@@@@@
2022-03-30 11:05:39,613DEBUG:debug
2022-03-30 11:05:39,613INFO:info
"""

如果你需要更多地控制日期/时间的格式,请为 basicConfig 提供 datefmt 参数,如下例所示:

logging.basicConfig(filename=log_filename,filemode='w',
                    format='%(asctime)s %(levelname)s: %(message)s',
                    datefmt="%m-%d-%Y %H:%M:%S",
                    level=logging.DEBUG)
logging.info('@@@@@@@@@@@')
logging.debug('debug')
logging.info('info')
"""
日志中的输出结果:
03-30-2022 11:11:41 INFO: @@@@@@@@@@@
03-30-2022 11:11:41 DEBUG: debug
03-30-2022 11:11:41 INFO: info
"""

总结

本文仅仅简单介绍了logging的使用,而logging提供了大量能使我们快速便捷地处理日志的函数和方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值