我已经将一个简单的 Flask Web 应用程序部署到 azure AppService 并且工作正常, 现在我必须将 Blob 存储连接到它以将日志保存到 Blob 存储。
from flask import Flask,request
app = Flask(__name__)
from flask import jsonify
import logging
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
@app.route("/api1")
def api1():
print("hello data is getting printed")
logger.info("API1 endpoint called. Hello, data is getting printed.")
return jsonify("Hello World")
我能够在 blob 存储中获取日志文件,但我只得到打印语句而不是
记录器
{ "time": "2024-09-20T04:47:50.8864337Z", "resultDescription": "hello data is getting printed", "resourceId": "/SUBSCRIPTIONS//RESOURCEGROUPS/FLASKNEW_GROUP/PROVIDERS/MICROSOFT.WEB/SITES/FLASKNEW", "containerId": "flasknew_06688305", "operationName": "Microsoft.Web/sites/log", "category": "AppServiceConsoleLogs", "level": "Informational", "location": "Central India", "EventStampType": "Stamp", "EventPrimaryStampName": "aaa-prod-cvf-023", "EventStampName": "waws-prod-pn1-023", "Host": "lw0sdlwk000BPK", "EventIpAddress": "1111"}
在文件中获取此输出而不是记录信息 谁能告诉我为什么会这样
我上面已经提到了
我能够在 blob 存储中获取日志文件,但我只得到打印语句,而不是记录器:
为了避免上述问题,您需要使用Python中的
file handler
下的stream handler
或logging handlers
。
请参阅此处在 Python 脚本中包含 logging handlers 来处理日志并将其写入控制台。
logfile = "<logfile>.log"
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", handlers=[
logging.FileHandler(logfile,mode='a', encoding=None, delay=False)
])
添加后,使用blob服务客户端库将其连接到blob存储并存储在其中。
请参阅@Thomas Gauvin 的博客,以清楚地了解如何在脚本中包含 blob 服务客户端的示例。
参考上面的博客,我编写了以下代码来满足要求。
blob_service_client = BlobServiceClient.from_connection_string("DefaultEndpointsProtocol=https;AccountName=storenewjhsd;AccountKey=xLZRCyVQEs2sbvAXxxxxtxxuJlA==;EndpointSuffix=core.windows.net")
container_name = "new"
def upload_logs():
blob_client = blob_service_client.get_blob_client(container=container_name, blob=logfile)
with open(logfile, "rb") as data:
blob_client.upload_blob(data=logfile)
或者参考此 Github,使用 Flask Web 应用程序将文件内容上传到 Blob 存储。