gpt4 book ai didi

azure - 如何在 Azure 函数中配置 MS.Extensions.Logging 日志级别?

转载 作者:行者123 更新时间:2023-12-03 00:25:25 31 4
gpt4 key购买 nike

我有一个 Azure 函数,它表现出一些意外的日志记录行为。 host.json 文件是这样的:

{
"version": "2.0",
"logging": {
"fileLoggingMode": "never",
"logLevel": {
"default": "Information",
"Function": "Information",
"Host": "Warning",
},
"applicationInsights": {
"samplingSettings": {
"excludedTypes": "Exception"
}
}
}
}

通过该配置,我预计 App Insights 中不会显示任何调试日志消息。但我们看到的是,对 logger.IsEnabled(LogLevel.Debug) 的调用返回 true(其中 logger 是一个 ILogger)。我们使用的包有一些昂贵的日志消息构造,这些日志消息构造包含在 IsEnabled 调用中,但即使使用上面的配置,也会调用该代码。

这只发生在 Azure 中;在本地运行时,我们没有看到相同的行为。

我们如何在 Azure 中配置日志记录,以便 IsEnabled(LogLevel.Debug) 返回 false?

最佳答案

我使用与你相同的host.json。

一开始,我面临着和你一样的情况。

然后,我简化了 host.json 文件。

这是我的函数代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace LogLevelFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string a = null;
if(log.IsEnabled(LogLevel.Debug)) {
log.LogInformation("Value is true.");
a = "Value is true.";
} else if(log.IsEnabled(LogLevel.Debug)==false){
log.LogInformation("Value is false.");
a = "Value is false.";
}
return (ActionResult)new OkObjectResult(a);
}
}
}

这是我的 host.json 文件:

{
"version": "2.0",
"logging": {
"logLevel": {
"Function.Function1": "information",
"Function": "Error"
}
}
}

在本地,你怎么设置都会有相应的结果。例如,如果将日志级别设置为error,那么触发触发器时将不会返回Information级别的信息。如下图,本地不显示Information前缀,但在门户上运行时会显示Information前缀。正在执行和已执行是信息级别。

enter image description here

本地设置其他loglevel级别只能得到'Value is false'的返回值,只有当loglevel设置为'debug'时才返回'Value is true'。

然后我尝试将此函数发布到 Azure,日志级别等于信息。然后我发现函数返回“Value”为true”。很奇怪,于是我尝试将loglevel改为error,然后发现原来用来显示信息级别信息的logstream中没有显示任何信息。这说明错误级别的设置是有效的。但触发器仍然返回“Value is True”。所以你只能认为Azure强制每个Function保留调试级别,而不管访问级别设置如何。

这可能是一个bug,因为似乎没有其他方法可以设置访问级别,无论你如何设置,调试访问级别始终保留。

关于azure - 如何在 Azure 函数中配置 MS.Extensions.Logging 日志级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254953/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com