Python使用logging模块实现自定义日志输出的完整步骤

拾光
拾光
发布时间:2026-10-14| 6人浏览过
原创

本文详细解析Python中logging模块的配置流程,涵盖从导入模块、创建日志收集器到设定日志级别、输出渠道及格式绑定的全过程。通过具体代码示例,展示如何同时实现控制台与文件日志输出,并自定义日志内容格式,帮助开发者快速掌握Python日志系统的核心用法。

Python日志模块基础配置步骤

首先,需要在代码中导入Python内置的logging模块,这是使用日志功能的前提。


import logging

接着,通过调用logging.getLogger()方法创建一个日志收集器实例,并为其指定一个唯一的名称,以便在项目中识别和管理。


logger = logging.getLogger(“日志收集器的name”)

随后,为创建的日志收集器设置全局日志级别。只有等级高于或等于该级别的日志消息才会被处理,通常设置为INFO或DEBUG级别以获取详细信息。


logger.setLevel(logging.INFO) #设置收集器的级别为INFO。

日志输出渠道决定了日志消息的目的地,常见的渠道包括控制台输出和文件输出。根据实际需求,可以配置一种或多种输出方式。

在确定输出渠道后,需要定义日志输出的内容格式。这包括时间戳、日志名称、级别、文件名、行号以及具体的日志消息等字段,以便更清晰地记录日志上下文。


# 设置日志的输出格式
 
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
 
formatter = logging.Formatter(fmt)

将定义好的日志格式对象(Formatter)绑定到具体的输出渠道处理器(Handler)上,确保每个渠道都按照设定的格式输出日志信息。

最后,将配置好的输出渠道处理器添加到日志收集器中。这样,当调用logger记录日志时,消息会根据配置分发到相应的渠道进行输出。

为了更直观地理解上述步骤,下面提供一个完整的代码示例,展示如何配置包含控制台和文件输出的自定义日志系统。

完整代码示例与详细解析


import os
import time
import logging

#返回一个logger实例,如果没有指定name,返回root logger。
# 只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。
# 这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。
logger = logging.getLogger('mylogger')
# 设置总日志级别, 也可以给不同的handler设置不同的日志级别
#设置logger的level, level有以下几个级别:
# 级别高低顺序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
# 如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出 
logger.setLevel(logging.DEBUG)

# 控制台日志和日志文件使用同一个formatter,formatter用于描述日志的格式
formatter = logging.Formatter(
	'%(asctime)s - %(filename)s[line:%(lineno)d] - <%(threadName)s %(thread)d>' +
	'- <Process %(process)d> - %(levelname)s: %(message)s'
)
# asctime:日志产生的时间;filename:产生日志的脚本文件名;lineno:该脚本文件哪一行代码产生了日志
# threadName: 当前线程名;thread: 当前进程名;Process进程同thread线程
# levelname: logger的级别;meesage: 具体的日志信息


# 创建Handler, 输出日志到控制台和文件
# 日志文件FileHandler
basedir = os.path.abspath(".") #返回脚本所在的绝对路径
log_dir = os.path.join(basedir, 'logs')  # 日志文件所在目录,即‘脚本路径/logs'
if not os.path.isdir(log_dir):
	os.mkdir(log_dir)
filename = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + '.log'  # 日志文件名,以当前时间命名
file_handler = logging.FileHandler(os.path.join(log_dir, filename))  # 创建日志文件handler
file_handler.setFormatter(formatter)  # 设置Formatter
file_handler.setLevel(logging.INFO)  # 单独设置日志文件的日志级别

# 控制台日志StreamHandler
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
# stream_handler.setLevel(logging.INFO)  # 单独设置控制台日志的日志级别,注释掉则使用总日志级别

# 将handler添加到logger中

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

至此,关于Python实现自定义日志的具体方法介绍完毕。如需了解更多相关技术细节,建议查阅本站其他文章或关注后续更新,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。