开发FastAPI应用可以借助阿里云的Logtail和日志服务(SLS),实现高效的日志收集与存储。下面就为大家详细介绍如何使用Logtail将FastAPI应用的日志上传到阿里云SLS。

一、安装Logtail

(一)安装依赖

在安装Logtail之前,要确保服务器上安装了curl工具。因为Logtail的自动诊断工具需要它来获取相关信息。

(二)下载Logtail安装包

从阿里云文档中找到Logtail的安装包下载路径,按照文档里的指引进行下载。

(三)安装Logtail(以Linux系统为例)

在Linux系统下,使用以下命令来安装Logtail:

wget http://logtail-release.oss-cn-hangzhou.aliyuncs.com/linux64/logtail.sh chmod 744 logtail.sh ./logtail.sh install 

wget命令用于从指定网址下载logtail.sh脚本文件;chmod 744 logtail.sh赋予该脚本文件一定的执行权限;最后的./logtail.sh install则是执行安装操作。

二、配置阿里云SLS

(一)创建SLS Project和Logstore

登录阿里云控制台,找到SLS控制台入口。在SLS控制台里创建一个新的Project和Logstore。Project就像是一个大仓库,Logstore则是仓库里的一个个小隔间,用来存放不同类型的日志数据。

(二)获取AccessKey ID和AccessKey Secret

创建一个RAM用户,并给这个用户授予对刚才创建的Project和Logstore的写入权限。之后,就能获取到AccessKey ID和AccessKey Secret。

三、配置Logtail

(一)创建Logtail配置

在SLS控制台中进行Logtail配置的创建。在配置里,要指定日志文件路径、日志格式等参数。比如下面这个示例配置:

{ "configName": "fastapi-logs", "inputType": "file", "inputDetail": { "logPath": "/path/to/your/fastapi/logs/*.log", "logType": "text", "filePattern": "regex", "logSample": "" }, "outputType": "LogService", "outputDetail": { "projectName": "your-project-name", "logstoreName": "your-logstore-name" } } 

configName是配置的名称;inputTypefile表示从文件中采集日志;logPath指定了FastAPI应用日志文件的存放路径,*是通配符,表示匹配该路径下所有的.log文件;logTypetext说明日志是文本类型;filePattern设置为regex,表示按正则表达式匹配文件;outputTypeLogService,表示输出到阿里云的日志服务;projectNamelogstoreName则是之前在SLS控制台创建的Project和Logstore的名称。

(二)应用配置

把创建好的配置应用到相应的机器组中。这样,Logtail就能按照配置去采集日志,并将其发送到SLS中。

四、配置FastAPI日志输出

(一)配置日志输出到文件(使用logging模块)

使用Python的logging模块可以将FastAPI应用的日志输出到文件。示例代码如下:

from fastapi import FastAPI from logging.handlers import RotatingFileHandler import logging app = FastAPI() logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) file_handler = RotatingFileHandler('/path/to/your/fastapi/logs/app.log', maxBytes=1024*1024*10, backupCount=5) file_handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) @app.get("/") def read_root(): logger.info("访问根路径") return {"Hello": "World"} 

首先创建了一个FastAPI应用实例app。然后获取一个日志记录器logger,并设置日志级别为INFO,表示只记录INFO级别及以上的日志信息。RotatingFileHandler用于创建一个按文件大小进行滚动记录的文件处理器,当app.log文件大小达到1024*1024*10字节(即10MB)时,会自动备份,最多保留5个备份文件。接着设置日志格式,最后将文件处理器添加到日志记录器中。在read_root函数里,使用logger.info记录访问根路径的日志信息。

(二)使用loguru配置日志

如果更喜欢用loguru来配置日志,可以参考以下代码:

import os import time from loguru import logger log_path = os.path.join(os.getcwd(), 'logs') if not os.path.exists(log_path): os.mkdir(log_path) log_path_error = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}_error.log') logger.add(log_path_error, rotation="12:00", retention="5 days", enqueue=True) # 在需要的地方使用logger logger.info("创建用户") 

这段代码先确定日志文件的存放路径log_path,如果该路径不存在就创建它。然后定义了错误日志文件的路径log_path_error,使用logger.add方法添加日志记录器,设置日志文件每天12点进行滚动(rotation="12:00"),日志文件保留5天(retention="5 days"),并且使用队列异步写入日志(enqueue=True)。在实际使用中,在需要记录日志的地方,比如“创建用户”这个业务逻辑处,使用logger.info记录相关信息。

五、测试日志上传

(一)生成测试日志

确保FastAPI应用正在运行并生成日志,而且生成的日志文件存放在之前配置Logtail时指定的路径中。

(二)检查SLS日志

登录阿里云SLS控制台,进入之前创建的Logstore,查看是否成功上传了日志。如果能在Logstore里看到日志内容,那就说明整个配置过程是成功的,Logtail顺利地把FastAPI应用的日志“送”到了SLS中。

通过以上这些步骤,你就能成功使用Logtail将FastAPI应用的日志上传到阿里云SLS,实现高效的日志管理啦。