一文掌握 Python 中的 logging 模块

文摘   2024-11-19 11:05   江苏  

什么是 logging 模块?

在编程中,日志记录是一个非常重要的功能。它可以帮助我们跟踪程序的运行状态,调试问题,以及监控应用程序的行为。Python 的 logging 模块就是为了解决这些问题而设计的。它提供了灵活且强大的日志记录功能。

为什么使用 logging 模块?

1. 调试方便:通过日志可以快速定位问题。2. 灵活配置:可以根据需要调整日志级别和输出格式。3. 可扩展性强:支持多种日志处理器,如文件、网络、邮件等。

基本使用

1. 导入模块

首先,我们需要导入 logging 模块:

import logging

2. 配置基本日志记录

最简单的日志记录配置是使用 basicConfig 方法:

# 配置日志记录的基本设置
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

  • level:设置日志级别,常见的有 DEBUG, INFO, WARNING, ERROR, CRITICAL
  • format:设置日志输出的格式,包括时间、日志级别和消息。

3. 记录日志

使用 logging 模块记录日志非常简单:

# 记录不同级别的日志
logging.debug('这是一个调试信息')
logging.info('这是一个信息提示')
logging.warning('这是一个警告信息')
logging.error('这是一个错误信息')
logging.critical('这是一个严重错误信息')

进阶使用

1. 日志文件输出

将日志输出到文件中,而不是控制台:

# 配置日志输出到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录日志
logging.debug('这是一个调试信息')

2. 多个日志处理器

可以同时将日志输出到多个地方,例如控制台和文件:

import logging

# 创建一个 logger 对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 创建一个 FileHandler 对象,用于将日志输出到文件
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)

# 创建一个 StreamHandler 对象,用于将日志输出到控制台
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_formatter = logging.Formatter('%(levelname)s - %(message)s')
stream_handler.setFormatter(stream_formatter)

# 将处理器添加到 logger
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

# 记录日志
logger.debug('这是一个调试信息')
logger.info('这是一个信息提示')
logger.warning('这是一个警告信息')
logger.error('这是一个错误信息')
logger.critical('这是一个严重错误信息')

3. 日志过滤器

可以使用过滤器来控制哪些日志会被记录:

import logging

# 创建一个 logger 对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 创建一个过滤器
class MyFilter(logging.Filter):
    def filter(self, record):
        return 'error' in record.getMessage().lower()

# 创建一个 FileHandler 对象,用于将日志输出到文件
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
file_handler.addFilter(MyFilter())

# 将处理器添加到 logger
logger.addHandler(file_handler)

# 记录日志
logger.error('这是一个包含 error 的错误信息')
logger.error('这是一个普通的错误信息')

实战案例:日志记录在 Web 应用中的应用

假设我们有一个简单的 Flask 应用,需要记录用户的访问日志和错误日志。

1. 安装 Flask

pip install Flask

2. 创建 Flask 应用

from flask import Flask, request
import logging

app = Flask(__name__)

# 配置日志
logging.basicConfig(filename='flask_app.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

@app.route('/')
def home():
    # 记录访问日志
    ip_address = request.remote_addr
    logging.info(f'User from {ip_address} visited the home page')
    return 'Welcome to the Home Page!'

@app.route('/error')
def error():
    try:
        # 模拟一个错误
        1 / 0
    except ZeroDivisionError as e:
        # 记录错误日志
        logging.error(f'An error occurred: {e}')
        return 'An error occurred!'500

if __name__ == '__main__':
    app.run(debug=True)

总结

本文介绍了 Python 中 logging 模块的基本使用方法和进阶技巧。

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!

付费合集推荐

Python编程基础

Python办公自动化-Excel

微信公众号批量上传发布系统

文末福利

公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。

精品系统

微信公众号批量上传发布系统

关注我👇,精彩不再错过

手把手PythonAI编程
分享与人工智能和python编程语言相关的笔记和项目经历。
 最新文章