gpt4 book ai didi

c# - 如何在 ILogger 中刷新应用程序洞察

转载 作者:行者123 更新时间:2023-12-02 00:20:30 25 4
gpt4 key购买 nike

我有一个使用应用程序洞察的 Windows 控制台应用程序。我使用 Microsoft.Extensions.DependencyInjection 来设置我的类并添加 ILogger

如果出现异常,我想将其记录到 Application Insights。但由于 Application Insights 确实不会立即发送跟踪,因此我想刷新日志。

有没有办法触发 ILogger 后面的 Application Insights 刷新?

        static async Task Main(string[] args)
{
ServiceProvider serviceProvider = ConfigureServices();

var program = serviceProvider.GetService<Program>();
await program.Run();
}

public Program(ILogger<Program> logger)
{
this.logger = logger;
}

private static ServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
services
.AddLogging(opt =>
{
opt.AddConsole();
opt.AddApplicationInsights();
})
.AddTransient<Program>()
return services.BuildServiceProvider();
}

public async Task Run()
{
try
{
do.stuff()
}
catch (Exception e)
{
logger.LogError(e, "Exception occured");
// How to flush Application insights here
// Need to wait for Flush (see https://learn.microsoft.com/en-us/azure/azure-monitor/app/console)
await Task.Delay(1000);
throw;
}
}

最佳答案

请尝试使用InMemoryChannel.Flush方法,代码示例如下:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

namespace ConsoleApp3netcore
{
class Program
{
private readonly ILogger logger;
static InMemoryChannel channel = new InMemoryChannel();

static async Task Main(string[] args)
{
ServiceProvider serviceProvider = ConfigureServices();

var program = serviceProvider.GetService<Program>();
await program.Run();
}

public Program(ILogger<Program> logger)
{
this.logger = logger;
}

private static ServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
services.Configure<TelemetryConfiguration>(
(config) =>
{
config.TelemetryChannel = channel;
}
);
services
.AddLogging(opt =>
{
opt.AddConsole();
opt.AddApplicationInsights();
})
.AddTransient<Program>();
return services.BuildServiceProvider();
}

public async Task Run()
{
try
{
throw new Exception("my exception 111");
}
catch (Exception e)
{
logger.LogError(e, "Exception occured");
// How to flush Application insights here
channel.Flush();

await Task.Delay(1000);
throw;
}
}
}
}

希望有帮助。

关于c# - 如何在 ILogger 中刷新应用程序洞察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55531886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com