【问题标题】:How to get App Insights to print to console on .NET Core 3.1?如何让 App Insights 在 .NET Core 3.1 上打印到控制台?
【发布时间】:2020-02-21 21:42:09
【问题描述】:
我有一个使用 Host.CreateDefaultBuilder 初始化的 .NET Core 3.1 控制台应用程序。我已正确配置它,我可以在 Azure 门户上看到 TelemetryClient 正在正确上传所有事件。
出于诊断目的,我想插入 Application Insights,以便它将通过它传递到控制台的事件打印出来。理想情况下,我可以在打印时按照我想要的方式对其进行格式化,但这是次要的。
这可能吗?
谢谢!
【问题讨论】:
标签:
.net-core
azure-application-insights
【解决方案1】:
如果有人有同样的问题,可以通过编写自己的处理器来做到这一点。例如,此代码将准确地写入调试输出中显示的内容:
using System;
using System.Text;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.Implementation;
namespace YourNamespace
{
public class TelemetryConsoleWritingProcessor : ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
public TelemetryConsoleWritingProcessor(ITelemetryProcessor next) => Next = next;
public void Process(ITelemetry item)
{
byte[] serializedItem = JsonSerializer.Serialize(new ITelemetry[] { item }, false);
string jsonItem = Encoding.UTF8.GetString(serializedItem);
Console.WriteLine($"Application Insights Telemetry: {jsonItem}");
Next.Process(item);
}
}
}
并在配置 TelemetryConfiguration 时通过执行以下操作来注册它:
options.TelemetryProcessorChainBuilder.Use(next => new TelemetryConsoleWritingProcessor(next));
虽然这可行,但对于控制台而言,输出非常冗长。所以我个人的实现是针对 Process() 中的特定项目类型,并为控制台自定义格式。
希望这会有所帮助。