如何用Python进行日志记录 4个实用方法

文摘   2024-11-09 20:02   江苏  

日志记录是软件开发中的一个重要组成部分,它可以帮助我们跟踪程序运行时的状态,调试问题,以及监控应用程序的行为。Python 提供了多种方法来进行日志记录,今天我们来学习四种非常实用的方法。

方法一:使用内置的 logging 模块

logging 模块是 Python 标准库中的一部分,提供了灵活的日志记录功能。下面是一个简单的例子:

import logging

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

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

输出结果:

2023-10-01 12:00:00,000 - DEBUG - 这是一个调试信息
2023-10-01 12:00:00,001 - INFO - 这是一个信息提示
2023-10-01 12:00:00,002 - WARNING - 这是一个警告信息
2023-10-01 12:00:00,003 - ERROR - 这是一个错误信息
2023-10-01 12:00:00,004 - CRITICAL - 这是一个严重错误信息

解释:

  • basicConfig 函数用于配置日志的基本设置,包括日志级别、格式等。
  • logging.debuglogging.info 等函数用于记录不同级别的日志信息。

方法二:将日志记录到文件

有时候我们需要将日志记录到文件中,以便后续查看和分析。下面是一个示例:

import logging

# 创建日志记录器
logger = logging.getLogger('example_logger')
logger.setLevel(logging.DEBUG)

# 创建文件处理器
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 创建日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# 添加处理器到日志记录器
logger.addHandler(file_handler)

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

输出结果:example.log 文件中可以看到以下内容:

2023-10-01 12:00:00,000 - example_logger - DEBUG - 这是一个调试信息
2023-10-01 12:00:00,001 - example_logger - INFO - 这是一个信息提示
2023-10-01 12:00:00,002 - example_logger - WARNING - 这是一个警告信息
2023-10-01 12:00:00,003 - example_logger - ERROR - 这是一个错误信息
2023-10-01 12:00:00,004 - example_logger - CRITICAL - 这是一个严重错误信息

解释:

  • getLogger 函数用于创建一个日志记录器。
  • FileHandler 类用于将日志记录到文件中。
  • Formatter 类用于定义日志的格式。
  • addHandler 方法用于将处理器添加到日志记录器中。

方法三:使用日志过滤器

有时候我们希望只记录特定类型或来源的日志。可以使用日志过滤器来实现这一点。下面是一个示例:

import logging

class MyFilter(logging.Filter):
    def filter(self, record):
        return 'specific' in record.getMessage()

# 创建日志记录器
logger = logging.getLogger('example_logger')
logger.setLevel(logging.DEBUG)

# 创建文件处理器
file_handler = logging.FileHandler('filtered_example.log')
file_handler.setLevel(logging.DEBUG)
file_handler.addFilter(MyFilter())

# 创建日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# 添加处理器到日志记录器
logger.addHandler(file_handler)

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

输出结果:filtered_example.log 文件中可以看到以下内容:

2023-10-01 12:00:00,000 - example_logger - INFO - 这是一个包含 specific 的信息提示
2023-10-01 12:00:00,001 - example_logger - ERROR - 这是一个包含 specific 的错误信息

解释:

  • MyFilter 类继承自 logging.Filter,并重写了 filter 方法,用于过滤包含特定字符串的日志。
  • addFilter 方法用于将过滤器添加到处理器中。

方法四:使用第三方库 loguru

loguru 是一个非常强大的第三方日志库,提供了许多便捷的功能。下面是一个示例:

from loguru import logger

# 配置日志记录器
logger.add("loguru_example.log", format="{time} {level} {message}", level="DEBUG")

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

输出结果:loguru_example.log 文件中可以看到以下内容:

2023-10-01 12:00:00 DEBUG 这是一个调试信息
2023-10-01 12:00:00 INFO 这是一个信息提示
2023-10-01 12:00:00 WARNING 这是一个警告信息
2023-10-01 12:00:00 ERROR 这是一个错误信息
2023-10-01 12:00:00 CRITICAL 这是一个严重错误信息

解释:

  • logger.add 方法用于配置日志记录器,指定日志文件路径、格式和级别。
  • loguru 的语法更加简洁,使用起来非常方便。

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

假设我们正在开发一个 Flask 应用,希望在用户访问某些页面时记录日志。我们可以使用 logging 模块来实现这一点。

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():
    user_agent = request.headers.get('User-Agent')
    logging.info(f'Home page accessed by {user_agent}')
    return "欢迎访问首页!"

@app.route('/about')
def about():
    user_agent = request.headers.get('User-Agent')
    logging.info(f'About page accessed by {user_agent}')
    return "关于我们"

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

输出结果:flask_app.log 文件中可以看到以下内容:

2023-10-01 12:00:00,000 - INFO - Home page accessed by Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
2023-10-01 12:00:01,000 - INFO - About page accessed by Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36

解释:

  • 我们在 Flask 应用中配置了日志记录器,记录用户的访问信息。
  • 每当用户访问 //about 页面时,都会记录一条日志。

总结

本文介绍了四种使用 Python 进行日志记录的方法,包括使用内置的 logging 模块、将日志记录到文件、使用日志过滤器以及使用第三方库 loguru。通过这些方法,我们可以灵活地记录和管理应用程序的日志,帮助我们更好地调试和监控程序。

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

付费合集推荐

Python编程基础

Python办公自动化-Excel

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

文末福利

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

精品系统

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

关注我👇,精彩不再错过


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