章
目
录
开发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
是配置的名称;inputType
为file
表示从文件中采集日志;logPath
指定了FastAPI应用日志文件的存放路径,*
是通配符,表示匹配该路径下所有的.log
文件;logType
为text
说明日志是文本类型;filePattern
设置为regex
,表示按正则表达式匹配文件;outputType
为LogService
,表示输出到阿里云的日志服务;projectName
和logstoreName
则是之前在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,实现高效的日志管理啦。