我正尝试在模块级别的代码级别将信息记录到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中日志记录的工作方式。如果有人可以在这里填补我为何无法正常运行日志记录的空白,将不胜感激!
答案 0 :(得分:1)
这是原因:
问题来自应用程序日志记录,默认情况下,azure上的日志记录未打开。这是解决方案:
转到平台功能->所有设置。
转到搜索应用程序服务日志->应用程序日志记录->设置保存日志的时间->保存修改。
那一切都会好的。
这是我的代码:
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:
这是官方文档: