Python使用logging模块实现自定义日志输出的完整步骤
本文详细解析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实现自定义日志的具体方法介绍完毕。如需了解更多相关技术细节,建议查阅本站其他文章或关注后续更新,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













