如何让 App Insights 打印到 .NET Core 3.1 上的控制台?
How to get App Insights to print to console on .NET Core 3.1?
我有一个 .NET Core 3.1 控制台应用程序,使用 Host.CreateDefaultBuilder 初始化。我已正确配置它,我可以在 Azure 门户上看到 TelemetryClient 正在正确上传所有事件。
出于诊断目的,我想插入 Application Insights,以便它将通过它的事件打印到控制台。理想情况下,我可以在打印时按照我想要的方式对其进行格式化,但这是次要的。
这可能吗?
谢谢!
如果有人有同样的问题,可以通过编写自己的处理器来解决。例如,此代码将向控制台写入调试输出中显示的内容:
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() 内部的特定项目类型,并为控制台自定义格式。
希望对您有所帮助。
我有一个 .NET Core 3.1 控制台应用程序,使用 Host.CreateDefaultBuilder 初始化。我已正确配置它,我可以在 Azure 门户上看到 TelemetryClient 正在正确上传所有事件。
出于诊断目的,我想插入 Application Insights,以便它将通过它的事件打印到控制台。理想情况下,我可以在打印时按照我想要的方式对其进行格式化,但这是次要的。
这可能吗?
谢谢!
如果有人有同样的问题,可以通过编写自己的处理器来解决。例如,此代码将向控制台写入调试输出中显示的内容:
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() 内部的特定项目类型,并为控制台自定义格式。
希望对您有所帮助。