如何在Azure函数中配置MS.Extensions.Logging日志级别?
我有一个Azure函数,它显示了一些意外的日志记录行为。如何在Azure函数中配置MS.Extensions.Logging日志级别?,azure,.net-core,azure-functions,microsoft-extensions-logging,Azure,.net Core,Azure Functions,Microsoft Extensions Logging,我有一个Azure函数,它显示了一些意外的日志记录行为。host.json文件如下: { "version": "2.0", "logging": { "fileLoggingMode": "never", "logLevel": { "default": "Information", "Function": "Information", "Host": "Warning", }, "applicationInsight
host.json
文件如下:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "never",
"logLevel": {
"default": "Information",
"Function": "Information",
"Host": "Warning",
},
"applicationInsights": {
"samplingSettings": {
"excludedTypes": "Exception"
}
}
}
}
通过这种配置,我希望AppInsights中不会显示调试日志消息。但我们看到的是,对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);
}
}
}
在本地,如何设置它将有相应的结果。例如,如果将loglevel设置为error,则触发触发器时不会返回信息级别的信息。如下图所示,信息前缀为本地不显示,但信息前缀为在门户上运行时显示。执行和执行是信息级的
在本地,设置其他日志级别只能获得“value is false”的返回值,当日志级别设置为“debug”时,只能返回“value is true”
然后我尝试将此函数发布到Azure,日志级别等于信息。然后我发现函数返回'Value'为true'。这很奇怪,所以我尝试将loglevel更改为error,然后发现原来用于显示信息级别信息的logstream中没有显示任何信息。这表明错误级别的设置是有效的。但是触发器仍然返回“Value is True”。因此,您只能认为Azure强制每个函数保留调试级别,而不管访问级别设置如何
这可能是一个bug,因为似乎没有其他方法来设置访问级别,无论您如何设置,调试访问级别始终保持不变
{
"version": "2.0",
"logging": {
"logLevel": {
"Function.Function1": "information",
"Function": "Error"
}
}
}