我有一个使用 .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"
}
}
}
我能够记录痕迹以及
Custom Properties
到 Application Insights
。
我对
logConfig.json
和 Program.cs
文件做了一些更改。
我也可以看到我的轨迹的自定义属性。
我的足迹:
感谢@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" />
输出:
单击轨迹。
自定义属性: