“动动小手,点点关注呗~”
一切伟大功绩,一切荣华富贵,只能暂留,终归灭迹。所有欢笑,所有眼泪,所有喜悦,所有痛苦,到头来全是虚空一片,因为人生有限。人生是虚无。一场梦。一个记忆。 ——白先勇《台北人》
在Python开发中,日志记录是一项至关重要的工作。无论是排查程序运行时的错误,还是追踪程序的执行流程,日志都能提供关键的信息。logging模块作为Python标准库的一部分,为我们提供了功能强大且灵活的日志记录工具。本文将深入剖析logging模块,带您掌握其核心功能与高级用法。
一、logging模块基础概念
logging模块提供了一套完整的日志记录系统,它可以将日志信息输出到控制台、文件或其他目标。日志记录包含多个关键组件:
1. 日志记录器(Logger):负责产生日志记录,是应用程序中使用的主要接口。
2. 处理器(Handler):决定日志记录的输出目的地,如控制台、文件等。
3. 格式化器(Formatter):定义日志记录的输出格式。
4. 过滤器(Filter):对日志记录进行筛选,决定哪些日志记录会被处理。
二、基本使用示例
2.1 简单配置与输出
代码含义描述:
• logging.basicConfig() 用于进行基础配置。level=logging.INFO 设置了日志记录的级别为INFO,这意味着只有级别大于等于INFO(即INFO、WARNING、ERROR、CRITICAL)的日志会被记录。
• format 参数定义了日志记录的格式,其中:
◦ %(asctime)s:日志发生的时间。
◦ %(name)s:日志记录器的名称。
◦ %(levelname)s:日志级别。
◦ %(message)s:日志的具体内容。
• datefmt 参数指定了时间的格式。
• logging.getLogger(__name__) 获取一个以当前模块名为名称的日志记录器。__name__ 在Python中会根据模块的使用情况自动赋值,在主模块中为__main__,在被导入模块中为模块名。
• 后面使用logger调用不同级别的日志记录方法,生成相应级别的日志。
运行结果:
可以看到,由于设置了INFO级别,DEBUG级别的日志没有被输出。
2.2 日志输出到文件
代码含义描述:通过在basicConfig中添加filename='app.log'参数,将日志输出到名为app.log的文件中,其他配置与输出到控制台类似。
运行结果:运行代码后,在当前目录下会生成app.log文件,内容如下:
三、高级配置与使用
3.1 自定义处理器和格式化器
代码含义描述:
• 首先创建了一个日志记录器logger,并将其级别设置为DEBUG,表示可以处理所有级别的日志。
• 分别创建了StreamHandler(控制台处理器)和FileHandler(文件处理器),并设置了不同的日志级别。控制台处理器只处理INFO及以上级别的日志,文件处理器处理所有级别的日志。
• 定义了一个格式化器formatter,然后将格式化器分别设置到两个处理器上。
• 最后将两个处理器添加到日志记录器中,这样日志记录器就会根据处理器的设置将日志输出到相应的地方。
运行结果:
控制台输出:
app_advanced.log文件内容:
3.2 日志过滤器
代码含义描述:
• 定义了一个自定义过滤器类MyFilter,继承自logging.Filter,并重写了filter方法。在filter方法中,判断日志记录的消息中是否包含特定关键词,如果包含则返回True,表示该日志记录会被处理;否则返回False,表示该日志记录会被过滤掉。
• 将过滤器添加到控制台处理器上,这样只有符合过滤条件的日志才会在控制台输出。
运行结果:
控制台输出:
可以看到,不包含特定关键词的DEBUG日志被过滤掉了。
四、在实际项目中的应用
在大型项目中,通常会将日志配置放在一个单独的配置文件中,例如logging.conf,然后在代码中读取配置文件来进行日志设置。
4.1 配置文件示例(logging.conf)
4.2 代码中读取配置文件
代码含义描述:
• 使用logging.config.fileConfig('logging.conf')从指定的配置文件logging.conf中读取日志配置信息,包括日志记录器、处理器、格式化器等的设置。
• 通过logging.getLogger('myapp')获取在配置文件中定义的名为myapp的日志记录器,然后就可以使用该记录器进行日志记录。
运行结果:运行代码后,控制台会输出相应日志,同时myapp.log文件中也会记录日志内容,格式和配置文件中定义的一致。
通过以上对logging模块的深入学习,您已经掌握了从基础使用到高级配置以及在实际项目中的应用方法。合理使用logging模块,能够帮助您更高效地调试和监控Python程序,提升开发效率和代码质量。
“动动小手,点点关注呗~”🫰
领取专属 10元无门槛券
私享最新 技术干货