Python 中 logging 模块详解及使用教程
编辑:本站更新:2024-12-21 13:46:13人气:7224
在 Python 编程中,logging 是一个内建的标准库模块,它提供了一种灵活且可扩展的方式来生成和处理程序运行时的事件日志。通过全面理解和熟练运用 logging 模块,开发者可以更高效地调试代码、记录应用程序的行为,并进行问题排查与性能分析。
**一、Logging模块基础**
`logging`模坓主要包含以下几个核心组件:
1. **Logger(记录器)**: Logger是整个log系统的核心实体,负责接收并分发 log 信息到相应的处理器。每个 logger 都有其名称,形成一种层次结构,方便分类管理不同来源的日志消息。
import logging
# 创建logger实例,默认级别为WARNING
my_logger = logging.getLogger('my_module')
2. **Log Levels(日志等级)**:Python定义了从低级至高级共6个级别的日志消息:DEBUG > INFO > WARNING > ERROR > CRITICAL > NOTSET。不同的场景下选择合适的日志输出级别至关重要。
3. **Handlers (处理器)** : Handler 负责将由 Logger 记录的消息传递给具体的设备或目标位置,如控制台、文件等。常见的 Handlers 包括 StreamHandler (用于向流对象例如sys.stdout打印)、FileHandler 和 SMTPHandler 等。
示例:
file_handler=logging.FileHandler("app.log")
stream_handler=logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 设置格式化字符串
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
my_logger.addHandler(file_handler)
my_logger.addHandler(stream_handler)
4. **Formatters(格式化器)**:用来指定日志条目的最终展示形式,包括时间戳、日志级别以及具体的信息内容。
5. **Filters(过滤器)**:可根据需要对特定条件下的日志项执行筛选操作,在某些情况下避免过多或者不重要的信息干扰查看者。
**二、配置 Logging**
除了上述基本用法外,我们还可以利用 `dictConfig()` 或者直接修改根 Logger 的属性来全局设置 logging 格式和行为。
import json
from logging.config import dictConfig
config_dict = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format' :'[%(asctime)-15s] [%(levelname)s]: %(message)s'
},
},
'handlers': {
'console':{
'class':'logging.StreamHandler',
'formatter': 'standard',
},
'file_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': "application.log",
'maxBytes': 10*1024*1024, # 文件大小限制
'backupCount': 5, # 备份份数上限
'formatter': 'standard',
}
},
'root': {
'level': 'DEBUG',
'handlers': ['console','file_handler']
}
}
dictConfig(config_dict)
在这个示例中,所有的日志都会被同时发送到标准错误流(即 console),并且所有大于等于 DEBUG 级别的日志会被保存进 application.log 文件里,当该文件超过一定尺寸后会自动滚动备份。
**三、实战应用举例**
当你在一个复杂的项目环境中工作时,可能会创建多个logger以区分来自不同部分或类的日志:
module_logger = logging.getLogger(__name__)
module_logger.setLevel(logging.DEBUG)
def some_function():
module_logger.debug("This is a debug message.")
module_logger.info("An info event occurred.")
...
在此情境中,函数some_function内的每一条调用了相应logger的方法都将按照设定好的规则产生对应的日志记录。
总结起来,深入掌握Python内置的logging模块有助于提升软件开发过程中的故障诊断效率,使得你的代码具备更好的自我描述性和透明性。无论是小型脚本还是大型复杂分布式系统的构建维护阶段,合理有效的日志策略都是必不可少的一部分。
**一、Logging模块基础**
`logging`模坓主要包含以下几个核心组件:
1. **Logger(记录器)**: Logger是整个log系统的核心实体,负责接收并分发 log 信息到相应的处理器。每个 logger 都有其名称,形成一种层次结构,方便分类管理不同来源的日志消息。
python
import logging
# 创建logger实例,默认级别为WARNING
my_logger = logging.getLogger('my_module')
2. **Log Levels(日志等级)**:Python定义了从低级至高级共6个级别的日志消息:DEBUG > INFO > WARNING > ERROR > CRITICAL > NOTSET。不同的场景下选择合适的日志输出级别至关重要。
3. **Handlers (处理器)** : Handler 负责将由 Logger 记录的消息传递给具体的设备或目标位置,如控制台、文件等。常见的 Handlers 包括 StreamHandler (用于向流对象例如sys.stdout打印)、FileHandler 和 SMTPHandler 等。
示例:
python
file_handler=logging.FileHandler("app.log")
stream_handler=logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 设置格式化字符串
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
my_logger.addHandler(file_handler)
my_logger.addHandler(stream_handler)
4. **Formatters(格式化器)**:用来指定日志条目的最终展示形式,包括时间戳、日志级别以及具体的信息内容。
5. **Filters(过滤器)**:可根据需要对特定条件下的日志项执行筛选操作,在某些情况下避免过多或者不重要的信息干扰查看者。
**二、配置 Logging**
除了上述基本用法外,我们还可以利用 `dictConfig()` 或者直接修改根 Logger 的属性来全局设置 logging 格式和行为。
python
import json
from logging.config import dictConfig
config_dict = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format' :'[%(asctime)-15s] [%(levelname)s]: %(message)s'
},
},
'handlers': {
'console':{
'class':'logging.StreamHandler',
'formatter': 'standard',
},
'file_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': "application.log",
'maxBytes': 10*1024*1024, # 文件大小限制
'backupCount': 5, # 备份份数上限
'formatter': 'standard',
}
},
'root': {
'level': 'DEBUG',
'handlers': ['console','file_handler']
}
}
dictConfig(config_dict)
在这个示例中,所有的日志都会被同时发送到标准错误流(即 console),并且所有大于等于 DEBUG 级别的日志会被保存进 application.log 文件里,当该文件超过一定尺寸后会自动滚动备份。
**三、实战应用举例**
当你在一个复杂的项目环境中工作时,可能会创建多个logger以区分来自不同部分或类的日志:
python
module_logger = logging.getLogger(__name__)
module_logger.setLevel(logging.DEBUG)
def some_function():
module_logger.debug("This is a debug message.")
module_logger.info("An info event occurred.")
...
在此情境中,函数some_function内的每一条调用了相应logger的方法都将按照设定好的规则产生对应的日志记录。
总结起来,深入掌握Python内置的logging模块有助于提升软件开发过程中的故障诊断效率,使得你的代码具备更好的自我描述性和透明性。无论是小型脚本还是大型复杂分布式系统的构建维护阶段,合理有效的日志策略都是必不可少的一部分。
www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源
PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。