将 Azure 函数与 dotnet 隔离运行时一起使用时,无法写入应用程序见解 serilog

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

我有一个使用 .NET 6 构建并使用

dotnet-isolated
运行时的 Azure Function 应用程序。默认记录器将日志推送到应用程序洞察,但是没有捕获自定义维度等。

根据票证 [https://learn.microsoft.com/en-us/answers/questions/371873/ilogger-structed-loggig-with-application-insight][1],我转向了 Serilog。

program.cs
看起来像这样:

var configuration = new ConfigurationBuilder()
     .SetBasePath(Directory.GetCurrentDirectory())
     .AddJsonFile("logConfig.json", optional: false, reloadOnChange: true)
     .Build();
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
    var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .WriteTo.ApplicationInsights(new TraceTelemetryConverter())
    .CreateLogger();
     services.AddLogging(logging =>
    {       
        logging.ClearProviders();
        logging.AddSerilog(logger);
    });
}).Build();
await host.RunAsync();

代码中使用的记录器示例:

_logger.LogInformation("xxxxxxx with invoice number: {invoiceNumber}", invoiceNumber);

logConfig.json
看起来像这样:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft.AspNetCore": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "ApplicationInsights",
        "Args": {          
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "SerilogTestApplication"
    }
  }
}
asp.net-core azure-functions azure-application-insights serilog
1个回答
0
投票

我能够记录痕迹以及

Custom Properties
Application Insights

我对

logConfig.json
Program.cs
文件做了一些更改。

我也可以看到我的轨迹的自定义属性。

我的足迹:

enter image description here

感谢@camerondwyer提供代码。

按照您提供的链接中的相同代码使用

TelemetryClient
记录自定义属性。

您的配置问题是您设置了 Serilog

MinimumLevel
Warning

我的

logConfig.json
文件:

{
  "ApplicationInsights": {
    "ConnectionString": "InstrumentationKey=**********;IngestionEndpoint=https://westus2-2.in.applicationinsights.azure.com/;LiveEndpoint=https://westus2.livediagnostics.monitor.azure.com/"
  },
  "Serilog": {
    "Using": [
      "Serilog.Sinks.ApplicationInsights"
    ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "SerilogTestApplication"
    }
  }
}

  • Program.cs
    文件中,添加以下行。
 .WriteTo.ApplicationInsights(Conn,new TraceTelemetryConverter())

Program.cs
文件:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Sinks.ApplicationInsights.TelemetryConverters;

var configuration = new ConfigurationBuilder()
     .SetBasePath(Directory.GetCurrentDirectory())
     .AddJsonFile("logConfig.json", optional: false, reloadOnChange: true)
     .Build();

var Conn = configuration["ApplicationInsights:ConnectionString"];


var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        var logger = new LoggerConfiguration()
        .ReadFrom.Configuration(configuration)
        .WriteTo.ApplicationInsights(Conn,new TraceTelemetryConverter())
        .CreateLogger();
        services.AddLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddSerilog(logger);
        });
    }).Build();

host.Run();

Function1.cs
文件

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "**********";

TelemetryClient telemetryClient = new TelemetryClient(configuration);

telemetryClient.TrackTrace("Hello World!");
Dictionary<string, string> properties = new Dictionary<string, string>()
{
    {"FirstName", "Harshitha" },
    {"LastName", "Veeramalla" },
};
telemetryClient.TrackTrace("User Details",SeverityLevel.Information, properties);

.csproj
文件:

<PackageReference Include="Serilog.AspNetCore" Version="6.1.0" />
<PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="4.0.0" />

输出: enter image description here

单击轨迹。

自定义属性: enter image description here

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