【问题标题】: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() 中的特定项目类型,并为控制台自定义格式。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2014-08-28
      相关资源
      最近更新 更多