gpt4 book ai didi

asp.net-core-2.0 - Application Insights 日志提供程序在 AspNetCore 2.0 中不工作

转载 作者:行者123 更新时间:2023-12-04 08:34:13 27 4
gpt4 key购买 nike

从我的 Web API 调用 logger.LogError("My error.") 时,未创建 Application Insights 事件。我通过两种方式确认这一点:

  • Visual Studio 2017 (v15.5.7) 中的 F5 调试不会在“输出/事件” Pane 中显示任何 Application Insights 事件。
  • 没有事件流向我在 Azure 中的 Application Insights 实例。

我怀疑我的问题是由于未使用 ApplicationInsightsLoggerProvider 正确配置应用程序的日志工厂。这是我通过阅读文章和源代码的理解,我应该:

  1. AddApplicationInsightsTelemetry 在我的服务集合上以确保 TelemetryClient 已注册。参见 ApplicationInsightsExtensions
  2. AddApplicationInsights 在我的 ILoggerFactory 上注册提供者并使用上面提到的客户端。参见 ApplicationInsightsLoggerFactoryExtensions

我确定我做错了什么,但我无法确定它是什么。我已将我的代码归结为下面的框架,我仍然能够重现我的问题。

我遇到了一个 similar question然而,在 StackOverflow 上,答案并没有解决我的问题。

WebApplication.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.2" />
</ItemGroup>

</Project>

Program.cs

public class Program
{
public static void Main( string[] args )
{
BuildWebHost( args ).Run();
}

public static IWebHost BuildWebHost( string[] args ) =>
WebHost.CreateDefaultBuilder( args )
.UseStartup<Startup>()
.Build();
}

appsettings.json

{
"ApplicationInsights": {
"InstrumentationKey": "omitted for StackOverflow"
}
}

Startup.cs

public class Startup
{
public Startup( IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory )
{
this.LoggerFactory = loggerFactory ?? throw new ArgumentNullException( nameof( loggerFactory ) );

this.Configuration = new ConfigurationBuilder()
.SetBasePath( hostingEnvironment.ContentRootPath )
.AddJsonFile( "appsettings.json", optional: true, reloadOnChange: true )
.AddEnvironmentVariables()
.Build();
}

IConfiguration Configuration { get; set; }

ILoggerFactory LoggerFactory { get; }

public void Configure( IApplicationBuilder app, IHostingEnvironment env )
{
app.UseMvc();
}

public void ConfigureServices( IServiceCollection services )
{
services.AddApplicationInsightsTelemetry( this.Configuration );
this.LoggerFactory.AddApplicationInsights( services.BuildServiceProvider(), LogLevel.Information );

services.AddMvc();
}
}

MyController.cs

[Route( "[controller]" )]
public class MyController : Controller
{
public MyController( ILogger<MyController> logger )
{
this.Logger = logger ?? throw new ArgumentNullException( nameof( logger ) );
}

ILogger<MyController> Logger { get; }

[HttpGet]
public void Get()
{
// *************************************************************************
// This line is not being captured as an Application Insights Event.
// *************************************************************************
this.Logger.LogError( "My error." );
// *************************************************************************
}
}

最佳答案

我了解到 ILoggerFactory loggerFactory 可以依赖注入(inject)到 Startup.Configure() 中。在记录器工厂的这个实例而不是从我的 Startup 构造函数中保存的实例上调用 AddApplicationInsights 后,一切都按预期进行。

只有 Startup 类需要修改我原来的问题。这是为了完整回答这个问题。

public Startup( IHostingEnvironment hostingEnvironment )
{
this.Configuration = new ConfigurationBuilder()
.SetBasePath( hostingEnvironment.ContentRootPath )
.AddJsonFile( "appsettings.json", optional: true, reloadOnChange: true )
.AddEnvironmentVariables()
.Build();
}

IConfiguration Configuration { get; set; }

public void Configure( IApplicationBuilder app, ILoggerFactory loggerFactory )
{
loggerFactory.AddApplicationInsights( app.ApplicationServices, LogLevel.Information );
app.UseMvc();
}

public void ConfigureServices( IServiceCollection services )
{
services.AddApplicationInsightsTelemetry( this.Configuration );
services.AddMvc();
}

学习机会!

如果更熟悉 Application Insights 和 AspNetCore 2.0 的人可以向我解释为什么这与原始问题的代码相比有效,我会非常想知道! :)

关于asp.net-core-2.0 - Application Insights 日志提供程序在 AspNetCore 2.0 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48958389/

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