2-添加日志模块

551 阅读4分钟

添加日志模块

回顾

通过上篇内容,我们已经使用Fastapi完成了我们的第一个接口。我们可以看到,使用Fastapi来编写接口是十分简单的。那么接下来,我们丰富一下上面的例子。

需求

现在的需求来了,在我们平时的开发过程中,总会遇到一些问题。但是又不是必现的,所以我们可以通过一些手段来写入日志,去发现问题。一个很明显的例子就是try/exception,遇到未知问题的时候可以将问题记录至日志并在事后排查。日志模块的好处我简单列了几点,如下:

  1. 问题诊断和排查:系统运行时,可能会出现各种各样的异常情况,比如程序崩溃、数据错误、网络连接失败等等。这些问题很难在系统运行时直接定位和找到根本原因,但是通过记录日志,我们可以更好地了解问题所在,甚至可以提前预知可能出现的问题。
  2. 性能监控和优化:记录日志还可以帮助我们监控系统的性能和资源使用情况,比如 CPU 占用率、内存使用情况、网络延迟等等。通过分析日志,我们可以找到程序的瓶颈所在,并进行相应的优化。
  3. 调试和追踪:当系统出现问题时,我们需要迅速定位问题,这时候日志就显得尤为重要。通过记录程序的关键信息和执行流程,我们可以更好地了解代码的执行情况,找到问题所在,并进行相应的修复。

总之,日志模块在代码中的作用非常重要,它可以帮助我们更好地了解系统运行情况,并提供有价值的信息用于调试和优化。

日志模块选用

logging:

logging 是 Python 标准库中的模块,它提供了一个灵活的日志记录系统,可用于调试和错误分析。使用 logging,我们可以将应用程序的日志记录到文件、终端、远程服务器等多个地方,还可以选择日志级别和格式。

logbook:

logbook 是一个 Python 日志记录库,它提供了比标准库 logging 更加简单、灵活、可定制的日志记录功能。它支持多线程和多进程,并提供了不同的处理器和记录器,可以将日志记录到文件、终端、邮件等多个地方。

loguru:

loguru 是一个 Python 日志记录库,它提供了简单易用的接口,可以轻松地将日志记录到文件、终端、邮件等多个地方。它支持多线程和多进程,并提供了颜色输出、格式化等多种特性。在此,我选择的是loguru,因为用这个的时间最多最长,因此选择。

安装

在终端输入pip3 install loguru并回车。

编写代码

日志模块属于工具类,因此将之划分到app/utils/log_config.py下。

# 导入所需的模块和库
import os  
from datetime import datetime  
from loguru import logger  
  
# 初始化日志记录器
def init_logger(log_file_path):
    # 如果日志文件夹不存在,则创建它
    if not os.path.exists(log_file_path):  
        os.makedirs(log_file_path)  

    # 获取当前时间并根据时间创建日志文件名
    now = datetime.now()  
    log_file_name = f"{log_file_path}{now.strftime('%Y-%m-%d_%H')}.log"  

    # 添加日志记录器,设置日志文件的轮换和保留策略
    logger.add(log_file_name, rotation="1 day", retention="7 days", enqueue=True)  

    # 记录日志,标记日志记录器已初始化
    logger.info("Logger initialized.")  
  
# 调用日志记录器初始化函数并传入日志文件夹路径
init_logger("logs/")  

# 如果这个 Python 脚本是直接被执行的(而不是作为模块被导入的),则执行以下代码
if __name__ == "__main__":
    # 什么也不做,直接跳过
    pass

在main.py中使用日志

import uvicorn  
  
from src.app import abandon  
from src.app.utils.log_config import logger  
  
  
@abandon.get('/')  
def hello_world():  
    logger.debug('这是一条log信息')  
    return 'Hello Abandon!'  
  
  
if __name__ == "__main__":  
    uvicorn.run(app=abandon, host='0.0.0.0', port=9923)

验证

启动服务访问http://localhost:9923

查看日志记录结果

  1. 控制台中有打印日志信息
  2. 查看项目目录下logs文件夹,文件夹中有时间分割的日志log文件。