python3--logging好用的日志模块

python3–logging

Python中的logging模块提供了一个灵活的,高效的日志输出系统。
它允许你记录代码中的事件,可以设置各种不同级别的日志记录,
例如跟踪、调试、信息、警告、错误和致命错误等,还可以选择输
出到控制台或文件等位置。
话不多说,上代码:

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('example.log')
fh.setLevel(logging.INFO)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)
logger.addHandler(ch)

logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

解析:

logger = logging.getLogger()

创建并返回一个名为"root"的Logger对象的工厂函数,它是logging模块中Logger的主要API。Logger对象是用于应用程序中显式打印日志消息的核心对象。Logger对象有一个名字,通常使用程序模块的名称。多个Logger对象可以存在于一个应用程序中,每个Logger可以有多个处理器(Handler),用于处理输出日志消息。Logger可以分层,每个Logger使用一个“.”号分割的层次结构命名。
简单来说,这个logger是一个类的实例,可以用type(logger)查看

logger.setLevel(logging.DEBUG)

定义模块输出的等级,这里最好默认选择DEBUG,也就是都输出
等级从低到高分为:
DEBUG->INFO->WARNING->ERROR->CRITICAL
CRITICAL:50,最高级别的严重错误,一般会导致程序退出
ERROR:40,严重级别的错误,不影响程序的继续运行
WARNING:30,警告信息,可能会有潜在问题
INFO:20,一般的信息,用于追踪程序的运行状态
DEBUG:10,最详细的调试信息,主要用于开发时排错

fh = logging.FileHandler('example.log')

定义一个可以将日志消息输出到文件的处理器。它的参数是一个字符串,表示要输出到的文件名或文件路径。如果文件不存在,会自动创建;如果文件已经存在,则会在文件末尾追加新的日志消息

fh.setLevel(logging.INFO)

将这个输出文件处理器设定其可以覆盖的等级,我这里设定的INFO,所以低于INFO的DEBUG信息不会被记录到example.log中,也可以不做设定,那么他会默认使用最开始logger.setLevel(logging.DEBUG)设定的等级

ch = logging.StreamHandler()

定义一个可以将日志消息输出到控制台的处理器。它可以将日志消息发送到任何类文件型对象(file-like object),例如控制台、标准输出等。

ch.setLevel(logging.ERROR)

这里与fh.setLevel()作用一致,给这个控制台处理器设定等级,我这里选定的ERROR级,所以低于INFO的DEBUG信息ERROR等级的信息将不会被输出到屏幕上,也可以不做设定,那么他会默认使用最开始设定的等级。

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

这一段的作用则是为了设定一个Log的格式,这里代表格式为:
日期时间-Log等级-Log信息

fh.setFormatter(formatter)
ch.setFormatter(formatter)

这则是将这个Log输出的格式分别给到两个不同的控制器

logger.addHandler(fh)

是Logger类的一个方法,用于将处理器(Handler)添加到Logger对象中,以便Logger对象将日志消息发送到该处理器进行处理。可以看作是需要使用这个命令,让这个处理器可以正常接受到后续logger给到的信息,才能正常进行记录或显示

logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

这一段则是记录了不同等级Log信息的输出方式结构就是logger.level(“message”)的格式,注意等级的单词是小写的,和上面logger.setLevel(logging.DEBUG)里的等级是有区别的

解析基本上就是这样,下面再看一下我们输出的效果:

#执行脚本时屏幕显示的内容
2023-06-08 14:42:34,909 - ERROR - This is an error message
2023-06-08 14:42:34,909 - CRITICAL - This is a critical message

# example.log 的内容
2023-06-08 14:42:34,909 - INFO - This is an info message
2023-06-08 14:42:34,909 - WARNING - This is a warning message
2023-06-08 14:42:34,909 - ERROR - This is an error message
2023-06-08 14:42:34,909 - CRITICAL - This is a critical message
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值