本文主要是介绍python3 logging入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 基础知识
-
什么是
logging
模块:logging
模块是 Python 的内置模块,用于记录和管理日志。它提供了灵活的方式来记录程序运行过程中的各种信息,如调试信息、错误信息等。
-
基本用法 (
basicConfig
):basicConfig()
是最简单的配置方式,用于设置日志的输出格式、日志级别和输出目标(如控制台、文件)。- 示例:
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical message')
- 重要参数:
level
: 设置最低日志级别(DEBUG
,INFO
,WARNING
,ERROR
,CRITICAL
)。format
: 设置日志的输出格式(如时间戳、日志级别、消息内容等)。
2. 日志记录器 (Logger
)
-
获取日志记录器 (
getLogger
):getLogger()
用于获取一个日志记录器对象(Logger
),它是logging
模块的核心对象。- 示例:
logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) logger.debug('Debug message from my_logger')
-
日志级别:
Logger
有五个级别,按照严重性递增:DEBUG
,INFO
,WARNING
,ERROR
,CRITICAL
。可以通过setLevel
方法设置日志记录器的级别。
-
多个日志记录器:
- 可以创建多个日志记录器,每个记录器可以有不同的日志级别和处理器(如文件、控制台等)。
3. 日志处理器 (Handler
)
-
控制日志输出的目的地:
Handler
决定日志的输出位置。常用的处理器包括StreamHandler
(输出到控制台)、FileHandler
(输出到文件)。
-
文件处理器 (
FileHandler
):FileHandler
用于将日志写入文件。可以设置日志文件的路径、模式(追加或覆盖)。- 示例:
file_handler = logging.FileHandler('app.log') file_handler.setLevel(logging.ERROR) logger.addHandler(file_handler)
-
格式化日志 (
Formatter
):Formatter
决定日志输出的格式。你可以为不同的处理器设置不同的格式化方式。- 示例:
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter)
4. 日志过滤器 (Filter
)
- 控制日志输出的条件:
Filter
用于细粒度控制哪些日志会被输出。可以为Logger
或Handler
添加过滤器。- 示例:
class ErrorFilter(logging.Filter):def filter(self, record):return record.levelno == logging.ERRORerror_filter = ErrorFilter() file_handler.addFilter(error_filter)
5. 高级特性
-
日志轮转 (
RotatingFileHandler
):- 用于限制日志文件大小,当文件达到一定大小时自动轮转(创建新的日志文件)。
- 示例:
from logging.handlers import RotatingFileHandler rotating_handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5) logger.addHandler(rotating_handler)
-
时间轮转日志 (
TimedRotatingFileHandler
):- 根据时间间隔自动创建新的日志文件(如每天、每小时)。
- 示例:
from logging.handlers import TimedRotatingFileHandler time_handler = TimedRotatingFileHandler('app.log', when='midnight', interval=1, backupCount=7) logger.addHandler(time_handler)
-
配置文件 (
dictConfig
):- 使用字典或配置文件来配置复杂的日志设置,适合大型应用。
- 示例:
import logging.config config = {'version': 1,'formatters': {'default': {'format': '%(asctime)s - %(levelname)s - %(message)s'}},'handlers': {'file': {'class': 'logging.FileHandler', 'filename': 'app.log', 'formatter': 'default'}},'root': {'level': 'DEBUG', 'handlers': ['file']} } logging.config.dictConfig(config) logging.debug('Debug message from configured logger')
6. 实践与优化
-
最佳实践:
- 为每个模块或组件创建独立的
Logger
,避免全局混淆。 - 使用
basicConfig
进行快速配置,复杂项目中使用dictConfig
或配置文件。 - 对于长期运行的应用,使用
RotatingFileHandler
或TimedRotatingFileHandler
避免日志文件过大。
- 为每个模块或组件创建独立的
-
性能考虑:
- 在性能敏感的环境中,使用合适的日志级别(如
INFO
或WARNING
),避免大量DEBUG
日志导致性能下降。 - 使用异步日志处理机制(如
QueueHandler
)在高并发环境中提升日志记录效率。
- 在性能敏感的环境中,使用合适的日志级别(如
7. 扩展与自定义
-
自定义日志处理器:
- 如果内置的
Handler
不满足需求,可以通过继承logging.Handler
类创建自定义处理器。
- 如果内置的
-
集成到现有框架:
- 学习如何在 Django、Flask 等框架中集成和配置
logging
模块,确保与框架的日志机制兼容。
- 学习如何在 Django、Flask 等框架中集成和配置
代码片段
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s # %(name)s - %(levelname)s - %(message)s')
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
logger.debug('Debug message from my_logger')file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)
logger.addHandler(file_handler)logger.debug('debug Starting')
logger.error('error starting')formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
logger.error('error starting file handler')class ErrorFilter(logging.Filter):def filter(self, record):return record.levelno == logging.ERRORerror_filter = ErrorFilter()
file_handler.addFilter(error_filter)
总结
通过从基础的 basicConfig
开始,逐步掌握 Logger
、Handler
、Formatter
等核心概念,再到高级特性如日志轮转、自定义处理器,你可以构建灵活、高效的日志系统,适用于各种规模的 Python 应用。
这篇关于python3 logging入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!