将应用洞察跟踪日志记录添加到 .net 核心控制台应用程序
Posted
技术标签:
【中文标题】将应用洞察跟踪日志记录添加到 .net 核心控制台应用程序【英文标题】:add app insights trace logging to .net core console application 【发布时间】:2017-12-07 19:36:09 【问题描述】:我有一个 .net 核心控制台应用程序(不是 AspNetCore),我想添加应用洞察日志记录,以便将跟踪日志推送到应用洞察。我曾尝试使用 Microsoft.ApplicationInsights.AspNetCore,但是当我这样做时:
factory.AddApplicationInsights(serviceProvider);
它抛出一个错误,说它找不到托管环境
尝试激活“Microsoft.ApplicationInsights.AspNetCore.TelemetryInitializers.AspNetCoreEnvironmentTelemetryInitializer”时,无法解析“Microsoft.AspNetCore.Hosting.IHostingEnvironment”类型的服务。
大概是因为这不是一个 AspNetCore 应用,而只是一个纯控制台应用。
有没有一种方法可以从我的 .net 核心控制台应用程序中将跟踪日志推送到 App Insights?
【问题讨论】:
使用 Microsoft.ApplicationInsights,如github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/… 中所述。 谢谢,看来我必须创建一个自定义记录器,然后在该记录器中调用底层 App Insights API。如有必要,我可以这样做,但我认为已经有一个可用的了。 docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger 有一个新的 Microsoft.Extensions.Logging.ApplicationInsights 包可用于控制台应用程序。 【参考方案1】:按照https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Getting-Started-for-a-.NET-Core-console-application 中的说明使用 Microsoft.ApplicationInsights。
【讨论】:
【参考方案2】:实际上,遇到了同样的问题,最后在 AddApplicationInsights 源代码中解决了。诀窍是您必须手动向容器注册 TelemetryClient 才能使这些东西适用于控制台应用程序:
var telemetryClient = new TelemetryClient(new TelemetryConfiguration()
InstrumentationKey = config.GetValue("ApplicationInsights:InstrumentationKey")
);
services.AddSingleton(x => telemetryClient);
var provider = services.BuildServiceProvider();
loggerFactory.AddApplicationInsights(provider, LogLevel.Information);
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Test");
【讨论】:
以上是关于将应用洞察跟踪日志记录添加到 .net 核心控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章
spring cloud sleuth 如何将跟踪信息添加到 logback 日志行