【发布时间】:2017-07-10 22:36:53
【问题描述】:
我正在尝试将异常记录到 Application Insights。我通过直接调用TelemetryClient.TrackException 成功地做到了这一点。但是,我想在我的代码中对此进行抽象,以防将来我想登录到其他平台,所以我想只坚持 ILogger 接口。
我发现您可以使用ILoggerFactory.AddApplicationInsights(已实现here),但无论我做什么,我都看不到ApplicationInsights 中显示的日志。
下面是我的代码:
Startup.cs
IConfigurationRoot Configuration { get; set; }
ILoggerFactory LoggerFactory { get; set; }
IServiceProvider ServiceProvider { get; set; }
public Startup( IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory )
{
this.LoggerFactory = loggerFactory;
string configurationFilePath = "abc.json";
this.Configuration = new ConfigurationBuilder()
.SetBasePath( hostingEnvironment.ContentRootPath )
.AddJsonFile( configurationFilePath, optional: true, reloadOnChange: true )
.AddEnvironmentVariables()
.Build();
}
public void Configure(
IApplicationBuilder applicationBuilder,
IHostingEnvironment hostingEnvironment,
ILoggerFactory loggerFactory,
IServiceProvider serviceProvider )
{
this.ServiceProvider = serviceProvider;
loggerFactory.AddApplicationInsights( serviceProvider );
applicationBuilder.UseMvc();
}
public void ConfigureServices( IServiceCollection services )
{
services.AddApplicationInsightsTelemetry( this.Configuration );
services.AddMvc( .... // A bunch of options here ... )
}
然后,我尝试像这样在我的控制器中使用它:
ILogger<XController> Logger { get; set; }
public XController( ILogger<XController> logger )
{
this.Logger = logger;
}
[HttpPost]
[Route( "v3.0/abcd" )]
public async Task PostEvent( [FromBody] XEvent xEvent )
{
this.Logger.LogError( 0, new Exception( "1234" ), "1234" );
}
但是,我根本没有看到与该请求相关的任何异常。如果我用TelemetryClient.TrackException 替换Logger.LogError 行(并首先创建TelemetryClient),那么我可以毫无问题地看到异常。
我不知道我做错了什么。有人可以帮忙吗?
【问题讨论】:
标签: c# logging asp.net-core azure-web-app-service azure-application-insights