Azure Functions日志-在模块级别记录信息

时间:2020-04-12 17:30:47

标签: python-3.x logging azure-functions

我正尝试在模块级别的代码级别将信息记录到Application Insights。

当从函数内部(在我的项目的任何模块中)调用记录器时,我可以成功登录INFO,WARNING等,但在函数外部(例如,初始化模块,要记录某些设置)时,则不能成功记录< / p>

例如,当在azure函数中运行HttpTrigger应用程序时,此方法有效,并将信息记录到应用程序见解中:

import logging

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('this message is logged successfully')
    do_something()

这不起作用:

import logging
logging.info('this message isnt logged anywhere')

def main(req: func.HttpRequest) -> func.HttpResponse:
    do_something()

我尝试使用命名记录器,更改记录设置,例如:

import logging
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
log.info('This still isnt logged')

def main(req: func.HttpRequest) -> func.HttpResponse:
    do_something()

并更改host.json中的配置:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  },
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Information",
      "Function": "Information",
      "Host.Aggregator": "Information"
    }
  }
}

在本地运行代码时,信息会在任何地方正确打印到标准输出。

我认为我必须完全误解az中日志记录的工作方式。如果有人可以在这里填补我为何无法正常运行日志记录的空白,将不胜感激!

1 个答案:

答案 0 :(得分:1)

这是原因:

enter image description here

问题来自应用程序日志记录,默认情况下,azure上的日志记录未打开。这是解决方案:

转到平台功能->所有设置。

enter image description here

转到搜索应用程序服务日志->应用程序日志记录->设置保存日志的时间->保存修改。

enter image description here

那一切都会好的。

这是我的代码:

import logging

import azure.functions as func

logger = logging.getLogger('name')
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
logger.addHandler(sh)
logger.info('This will work.')

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

设置之前,我面临与您相同的问题。但是设置后,我可以获得INFO:

enter image description here

这是官方文档:

https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-diagnostic-logs#enable-application-logging-linuxcontainer