使用诊断设置将 Azure WebApp 日志发送到 Azure Blob 存储

问题描述 投票:0回答:1

我已经将一个简单的 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"}

在文件中获取此输出而不是记录信息 谁能告诉我为什么会这样

我上面已经提到了

python azure flask azure-web-app-service azure-diagnostics
1个回答
0
投票

我能够在 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)

enter image description here

或者参考此 Github,使用 Flask Web 应用程序将文件内容上传到 Blob 存储。

© www.soinside.com 2019 - 2024. All rights reserved.