使用环境变量设置Azure Function的日志级别

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

我正在尝试控制 C# Azure 函数的日志级别。目标是更改日志级别而无需重新部署该功能。这个想法是改变环境变量来实现这一点。

我添加了一个环境变量来控制日志级别:

Environment variable

它似乎不起作用,因为我仍然看到调试和信息日志记录:

App Insights logs

我的 host.json 看起来像这样:

{
    "version": "2.0",
    "logging": {
      "applicationInsights": {
        "samplingSettings": {
          "isEnabled": true,
          "excludedTypes": "Request"
        },
        "enableLiveMetricsFilters": true
      },
      "logLevel": {
        "default": "Debug"
      }
    }
}

Program.cs 像这样:

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Debug))
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.Configure<LoggerFilterOptions>(options => options.Rules.Clear());      
    })
    .Build();

host.Run();

当我在本地运行我的函数应用程序时,当我更改 local.settings.json 时,它会按预期工作:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AzureFunctionsJobHost__logging__LogLevel__default": "Warning"
  }
}

我的功能:

 public class Function1
 {
     private readonly ILogger<Function1> _logger;

     public Function1(ILogger<Function1> logger)
     {
         _logger = logger;
     }
     
     [Function("LogDebug")]
     public IActionResult RunDebug([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
     {
         _logger.LogDebug("***********DEBUG***********");
         return new OkObjectResult("Welcome to Azure Functions!");
     }
     
     [Function("LogInformation")]
     public IActionResult RunInformation([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
     {
         _logger.LogInformation("***********INFORMATION***********");
         return new OkObjectResult("Welcome to Azure Functions!");
     }

     [Function("LogWarning")]
     public IActionResult RunWarning([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
     {
         _logger.LogWarning("***********WARNING***********");
         return new OkObjectResult("Welcome to Azure Functions!");
     }
 }

有人可以阐明我所缺少的内容吗?预先感谢。

c# azure logging environment-variables
2个回答
0
投票
 .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Debug))

您已将最低级别设置为“调试”。具有最低级别

Debug
的代码对于应用程序洞察力是至关重要的。它在本地工作正常,但对于门户来说它是压倒一切的。

host.json
:

 {
    "version": "2.0",
    "logging": {
      "applicationInsights": {
        "samplingSettings": {
          "isEnabled": true,
          "excludedTypes": "Request"
        },
        "enableLiveMetricsFilters": true
      },
      "logLevel": {
        "default": "Debug"
      }
    }
}

Function.cs
:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.ComponentModel;

namespace FunctionApp5
{
    public class Function
    {
        private readonly ILogger<Function> _logger;

        public Function(ILogger<Function> logger)
        {
            _logger = logger;
        }

        [Function("Function")]
        public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
        {
            _logger.LogDebug("************DEBUG***********");
            _logger.LogInformation("*************INFORMATION*************");
            _logger.LogWarning("******************WARNING**************");
            _logger.LogError("************ERROR***********");
            _logger.LogCritical("************CRITICAL***********");
            _logger.LogInformation("C# HTTP trigger function processed a request.");
            return new OkObjectResult("Welcome to Azure Functions!");
        }
    }
}

我使用相同的代码部署了代码,并且还在应用程序洞察中获取了所有级别的日志。但在

LogStream
我已经超过了
Warning
水平。

Program.cs
:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Debug))
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.Configure<LoggerFilterOptions>(options=>options.Rules.Clear());
    })
    .Build();

host.Run();

您需要将最低级别设置为

Warning
。我可以在应用程序见解和日志流的两个地方看到

Program.cs
:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Warning))
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.Configure<LoggerFilterOptions>(options=>options.Rules.Clear());
    })
    .Build();

host.Run();


0
投票

在同事的帮助下,我找到了一种使用环境变量控制日志级别的方法。

我将 Program.cs 更改为以下内容:

var host = new HostBuilder()
    .ConfigureAppConfiguration((context, config) =>
    {
        config.AddJsonFile("host.json", optional: true);
    })
    .ConfigureFunctionsWebApplication()
    .ConfigureServices((_, services) =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.Configure<LoggerFilterOptions>(options => options.Rules.Clear());
    })
    .ConfigureLogging((context, logging) =>
    {
    logging.AddConfiguration(context.Configuration.GetSection("AzureFunctionsWorker:Logging"));
    })
    .Build();

host.Run();

此更改允许通过环境变量配置日志记录。

我的 host.json 看起来像这样:

{
  "version": "2.0",
  "logging": {
    "console": {
      "isEnabled": true
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": false,
        "excludedTypes": "Request"
      },
      "enableLiveMetrics": true,
      "enableDependencyTracking": true,
      "enablePerformanceCountersCollection": true
    },
    "logLevel": {
      "default": "Error"
    }
  }
}

我可以根据所需的日志级别设置环境变量: 环境变量

结果如下所示: Azure 门户日志

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