一、基本使用
- 导入 logging 模块
在 Python 脚本开头导入logging模块:
import logging
- 配置日志记录
通过basicConfig方法进行简单配置,例如设置日志级别、输出格式和输出目标(默认为控制台):
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
这里设置日志级别为INFO,意味着只会记录INFO及以上级别的日志(INFO、WARNING、ERROR、CRITICAL)。格式中%(asctime)s表示时间,%(levelname)s是日志级别,%(message)s为日志信息。
3. 记录日志
使用不同级别的日志记录函数:
logging.debug('这是一条调试信息')
logging.info('这是一条普通信息')
logging.warning('这是一条警告信息')
logging.error('这是一条错误信息')
logging.critical('这是一条严重错误信息')
由于之前设置日志级别为INFO,debug级别的日志不会被记录输出。
二、日志级别
Python 的logging模块定义了以下几个日志级别,按严重程度从低到高排列:
- DEBUG:用于调试目的,记录详细信息,帮助开发者排查问题。
- INFO:用于记录程序正常运行的关键信息,如某个功能开始执行或执行完成。
- WARNING:表示可能存在问题,但程序仍可继续运行,如资源即将耗尽等情况。
- ERROR:记录程序发生错误的信息,此时程序可能部分功能无法正常运行。
- CRITICAL:表示发生了严重错误,程序可能无法继续运行,如系统崩溃等情况。
三、配置文件
为了更灵活地配置日志,可使用配置文件。常见的配置文件格式有JSON、YAML和ini,以ini格式为例:
- 创建logging.ini文件
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=INFO
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt=
此配置文件设置了根日志记录器,使用StreamHandler将日志输出到标准输出(控制台),并定义了日志格式。
2. 在 Python 脚本中加载配置文件
import logging
import logging.config
logging.config.fileConfig('logging.ini')
logger = logging.getLogger()
logger.info('使用配置文件记录的日志')
四、自定义日志记录器
- 创建自定义日志记录器
import logging
# 创建一个名为'my_logger'的日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建一个控制台处理器并设置级别
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 创建一个格式化器并添加到处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
# 将处理器添加到日志记录器
logger.addHandler(ch)
# 记录日志
logger.debug('这是自定义日志记录器的调试信息')
- 日志记录器层级关系
日志记录器具有层级关系,通过点号分隔命名。例如,parent.child,child日志记录器会继承parent日志记录器的设置,除非在child日志记录器中重新配置。这有助于组织和管理不同模块或功能的日志记录。
五、日志输出到文件
- 简单配置输出到文件
修改basicConfig配置,添加filename参数:
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log')
这样日志就会输出到app.log文件中,而非控制台。
2. 使用文件处理器
也可通过创建FileHandler实现更灵活的文件日志记录:
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 创建一个文件处理器
fh = logging.FileHandler('app.log')
fh.setLevel(logging.INFO)
# 创建一个格式化器并添加到处理器
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
# 将处理器添加到日志记录器
logger.addHandler(fh)
logger.info('这是输出到文件的日志')
通过合理运用 Python 的logging模块,能够高效地记录程序运行时的各种信息,为程序的调试、维护和监控提供有力支持。