python3:用logging.debug()全面替换print()来调试脚本code

通常我们在调试脚本程序时,一般是使用print()来调试,但是一个坏处是:如果我们的脚本程序很长,当调试完成了,我们必须将所有调试的print()注释掉或删除掉,极不方便。这时使用内置logging模块就完全满足我们的要求,是时候在调试时用logging.debug全面替换掉print()了. 

 

logging模块定义了下表所示的日志级别,按事件严重程度由低到高排列(注意是全部大写!因为它们是常量。):

级别级别数值使用时机
DEBUG10详细信息,常用于调试。
INFO20程序正常运行过程中产生的一些信息。
WARNING30警告用户,虽然程序还在正常工作,但有可能发生错误。
ERROR40由于更严重的问题,程序已不能执行一些功能了。
CRITICAL50严重错误,程序已不能继续运行。

默认级别是WARNING,表示只有WARING和比WARNING更严重的事件才会被记录到日志内,低级别的信息会被忽略。因此,默认情况下,DEBUG和INFO会被忽略,WARING、ERROR和CRITICAL会被记录。

有多种方法用来处理被跟踪的事件。最简单的方法就是把它们打印到终端控制台上。

下面是一个简单的实例

在使用过程中可以直接用logging.debug()来替换print()
如果程序调试好,可以通过修改level来控制debug info的输出, 
eg:将以下这句的level = logging.DEBUG换为logging.INFO就可以了.
logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s', level = logging.INFO)

import logging
from logging import debug

logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s', level = logging.DEBUG)


def func(s):
    str1 = 'Loop'
    str2 = 'leap'
    debug(f's的数据类型为 {type(s)}, {s}')
    debug(f'{str1} before you {str2}')
    return s/10
    

if __name__ == '__main__':
    func('100')

format='%(levelname)s:%(funcName)s:%(message)s'是个什么鬼?

format中的那个变量是logging内置的keys,如下表所示(只有我常用的部分), 所不用强记,有需要时翻一翻就直接用就好了. 

属性格式描述
asctime%(asctime)s日志产生的时间,默认格式为2003-07-08 16:49:45,896
created%(created)ftime.time()生成的日志创建时间戳
funcName%(funcName)s调用日志的函数名
levelname%(levelname)s日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
lineno%(lineno)d日志所针对的代码行号(如果可用的话)
module%(module)s生成日志的模块名
message%(message)s具体的日志信息
name%(name)s日志调用者
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果使用 `logging.debug()` 没有输出结果,可能是因为日志级别不够低,或者没有设置日志处理器。 1. 检查日志级别是否设置正确。例如,如果设置了日志级别为 `logging.INFO`,则只有 `logging.info()` 和比它更严重的日志消息才会被记录下来,而 `logging.debug()` 则会被忽略。因此,可以尝试将日志级别设置为 `logging.DEBUG`,再次调用 `logging.debug()` 以查看是否输出了日志消息。 2. 检查是否有设置日志处理器。如果没有设置日志处理器,则日志消息将不会被输出到控制台或文件中。可以尝试添加一个处理器,例如 `StreamHandler` 或 `FileHandler`,并将其添加到日志记录器中。 示例代码: ```python import logging # 创建日志记录器 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 创建日志处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # 创建日志格式器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) # 将日志处理器添加到日志记录器中 logger.addHandler(console_handler) # 输出日志消息 logger.debug('This is a debug message') ``` 在这个例子中,我们创建了一个日志记录器并将其级别设置为 `logging.DEBUG`。然后,我们创建了一个 `StreamHandler` 并将其级别设置为 `logging.DEBUG`。接下来,我们创建了一个格式器并将其应用于处理器。最后,我们将处理器添加到日志记录器中,并调用 `logger.debug()` 输出日志消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值