Python+logging输出到屏幕将log日志写入文件
介绍
在开发过程中,我们经常需要记录程序的运行状态和出现的问题。Python的logging模块可以帮助我们实现日志记录的功能,同时可以灵活地输出到屏幕或者写入文件。
基本概念
在使用logging模块前,我们先了解一些基本概念。
- Logger:日志记录器,负责产生日志消息。
- Handler:处理器,负责将日志记录发送到指定的位置,比如屏幕、文件等。
- Formatter:格式化器,负责对日志进行格式化,比如添加时间、日志级别等。
- Filter:过滤器,负责对日志进行过滤,可以根据日志级别、模块等条件进行过滤。
步骤
下面,我们分步骤介绍如何使用logging模块输出到屏幕并将日志写入文件。
步骤一:导入logging模块
首先,我们需要导入logging模块。
import logging
步骤二:创建Logger对象
接下来,我们创建一个Logger对象,用于产生日志消息。
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
在上面的代码中,我们将Logger的日志级别设置为DEBUG,这样可以记录所有日志消息。
步骤三:创建Handler对象
然后,我们创建一个Handler对象,用于将日志消息发送到指定的位置。
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('log.txt')
上面的代码中,我们创建了一个用于输出到屏幕的StreamHandler对象和一个用于写入文件的FileHandler对象,并分别赋值给console_handler和file_handler变量。
步骤四:创建Formatter对象
接下来,我们创建一个Formatter对象,用于格式化日志消息。
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(module)s - %(message)s')
在上面的代码中,我们分别创建了用于输出到屏幕的格式化器和写入文件的格式化器。
- 输出到屏幕的格式化器的格式为:“时间-日志级别-日志消息”。
- 写入文件的格式化器的格式为:“时间-日志级别-模块名-日志消息”。
步骤五:添加Formatter对象到Handler对象
然后,我们将步骤四中创建的Formatter对象添加到步骤三中创建的Handler对象中。
console_handler.setFormatter(console_formatter)
file_handler.setFormatter(file_formatter)
步骤六:添加Handler对象到Logger对象
接下来,我们将步骤三中创建的Handler对象添加到步骤二中创建的Logger对象中。
logger.addHandler(console_handler)
logger.addHandler(file_handler)
这样,日志消息就会同时输出到屏幕和写入文件。
步骤七:输出日志消息
最后,我们可以使用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')
上面的代码中,我们使用Logger对象分别输出了不同级别的日志消息。
总结
通过上面的步骤,我们可以使用Python的logging模块将日志消息同时输出到屏幕和写入文件。这样可以方便我们对程序的运行状态进行监控和查看。
使用logging模块的好处是能够灵活地控制日志的输出级别、输出位置和输出格式。我们可以根据实际需要来配置Logger、Handler和Formatter对象,以满足我们的需求。
在实际开发中,我们可以根据需要将日志记录到不同的文件中,方便进行日志分析和问题排查。
通过合理的设置日志级别和格式化方式,我们可以更好地监控程序运行状态,并为问题排查提供有力支持。
所以,学习使用Python的logging模块输出到屏幕并将日志写入文件是非常实用的技巧,对于程序开发和维护都有很大的帮助。