Azure 隔离函数将所有 App Insights 日志记录为“跟踪”和“信息”严重性

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

我有一个使用 v4 的 .NET 8 隔离函数。 我在这里遵循本指南来让 AppInsights 正常工作并使用 Nuget 的最新 AppInsights。 我的 Program.cs 看起来几乎与他们在这里给出的示例相同:https://github.com/devops-circle/Azure-Functions-Logging-Tests/blob/master/Func.Isolated.Net7.With.AI/Program。 CS

在我的函数中,我做了一些简单的事情来测试日志记录:

        _logger.LogTrace("TestLog Trace");
        _logger.LogInformation("TestLog Information");
        _logger.LogError( "TestLog Error");
        _logger.LogError(new Exception("something wrong"),"TestLog ErrorWithException");

日志显示在应用程序洞察中的事务搜索中,但它们都显示为跟踪条目,并且严重性级别始终为“信息”

这是我的 apsettings.json:

    {
  "IsEncrypted": false,
  "Values": {
    SNIPPED
  },
  "logging": {
    "fileLoggingMode": "always",
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "default": "Trace",
      "xxFunction.DoSomeAction": "Debug",
      "xxFunction.Login": "Debug",
      "xxFunction.WelcomeGiftQueue": "Debug"
    },
    "extensions": {
      "queues": {
        "maxPollingInterval": "00:00:10",
        "visibilityTimeout": "00:00:30",
        "batchSize": 16,
        "maxDequeueCount": 5,
        "newBatchThreshold": 8,
        "messageEncoding": "base64"
      }
    }
  },
  "ApplicationInsights": {
    "LogLevel": {
      "Default": "Trace"
    }
  }
}

这是我的 Program.cs:

using Application.Interfaces;
using AzureFunctionApp.Functions.Middleware;
using Infrastructure;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Azure.Core.Serialization;
using Newtonsoft.Json.Converters;

public class Program
{
    static ILogger _logger;

    public Program(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<Program>();
    }

    public static void Main()
    {
        var host = new HostBuilder()
            .ConfigureFunctionsWorkerDefaults(builder =>
            {
                builder.UseMiddleware<ExceptionLoggingMiddleware>();

                builder.UseWhen<AuthenticationMiddleware>(ctx =>
                {
                    return ctx.FunctionDefinition.InputBindings.Values
                                  .First(a => a.Type.EndsWith("Trigger")).Type == "httpTrigger";
                });
            })
            .ConfigureServices((ctx, serviceProvider) =>
            {
                serviceProvider.AddApplicationInsightsTelemetryWorkerService();

                serviceProvider.ConfigureFunctionsApplicationInsights();

                serviceProvider.Configure<WorkerOptions>(workerOptions =>
                {
                    JsonSerializerSettings settings = NewtonsoftJsonObjectSerializer.CreateJsonSerializerSettings();
                    settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    settings.NullValueHandling = NullValueHandling.Ignore;
                    workerOptions.Serializer = new NewtonsoftJsonObjectSerializer(settings);
                });

                serviceProvider.AddInfrastructureServices(ctx.Configuration);
            })
            .ConfigureAppConfiguration((hostContext, config) =>
            {
                config.AddJsonFile("appsettings.json", optional: true);
            })
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.ClearProviders();
                logging.AddSimpleConsole(console =>
                {
                    console.IncludeScopes = true;
                });

                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            })
            .Build();

        host.Run();
    }
}
azure-functions azure-application-insights
1个回答
0
投票

您所遵循的指南适用于

.NET 7 isolated

我创建了一个示例

.NET 8 isolated
Http 触发函数 并添加了您的日志记录示例。

我在我的

loglevel
中添加了
host.json

    "logging": {
        "logLevel": {
            "default": "Trace"
        },

并且显示正确的

logs
severity Level
正确。

host.json
:

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

program.cs
:

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

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();

HttpTrigger.cs
:

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class HttpTrigger1
    {
        private readonly ILogger _logger;

        public HttpTrigger1(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<HttpTrigger1>();
        }

        [Function("HttpTrigger1")]
        public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
        {
            _logger.LogWarning("Tracelog warning");
            _logger.LogError( "Tracelog Error");

            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            response.WriteString("Welcome to Azure Functions!");

            return response;
        }
    }
}

*.cproj
:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.2" />
    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
  </ItemGroup>
</Project>

OUTPUT
:

enter image description here

enter image description here

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