使用NLog和MicrosoftApplicationInsights.NLogTarget的控制台应用程序

时间:2019-02-20 17:54:46

标签: nlog azure-application-insights

对于基于.NET的控制台应用程序,我具有以下NLog.config。

<targets>

  <target xsi:type="File" name="file" fileName="${basedir}/logs/${shortdate}.log"
        layout="${longdate} ${uppercase:${level}} ${message}" />

  <target xsi:type="Console" name="console" 
        layout="${longdate}|${uppercase:${level}}|${message}" />

</targets>

<rules>
  <!-- add your logging rules here -->
  <logger name="*" minlevel="Debug" writeTo="file" />
  <logger name="*" minlevel="Debug" writeTo="console" />
</rules>

我已按照其他说明进行操作,并安装了Microsoft.ApplicationInsights.Web,并且一切正常,例如

var client = new TelemetryClient();

// logging a custom event using the AI API
client.TrackEvent("AppInsights is now ready for logging");
client.Flush();

这与NLog输出一起输出到文件和控制台。但是,一旦我添加Microsoft.ApplicationInsights.NLogTarget,所有NLog控制台输出和文件输出就会消失,也不会出现在Application Insights中。

有什么想法吗?我在NLog.config中尝试了不同的设置,为Application Insights设置了目标,但我没有做任何改变。

1 个答案:

答案 0 :(得分:4)

经过研究和帮助,我可以弄清楚这个问题:数据可以显示在控制台/文件/应用程序见解上。

  1. 您需要将nlog.config与app.config合并(在安装软件包Microsoft.ApplicationInsights.NLogTarget之后)。合并到app.config中之后,您可以删除nlog.config或将其保留在那里。

  2. 您应通过以下方式设置应用程序见解工具密钥:function fact(n) { return function () { var n = n; return (n < 2) ? 1 : (n*fact(n - 1)); }(); };

代码如下:

function fact(n) {
    return (n < 2) ? 1 : (n * fact(n - 1));
};

将nlog.config合并到app.config中(安装软件包Microsoft.ApplicationInsights.NLogTarget之后),因此新的app.config如下所示(然后您可以删除nlog.config或将其保留在此处):< / p>

TelemetryConfiguration.Active.InstrumentationKey = "xxxx";

运行项目,您可以在控制台和输出窗口中看到输出:

enter image description here

然后转到您定义的日志文件,您可以看到该日志文件已创建并具有正确的数据。

最后,通过导航到azure门户->您的应用洞察力->搜索,您可以看到其中的消息(可能需要几分钟):

enter image description here

顺便说一句,如何检查消息是否可以发送到Azure门户应用程序见解:

在Visual Studio中运行项目时,请检查输出窗口:

如果看到“ Application Insights Telemetry(未配置):”,则表示仪器密钥不正确或设置不正确。它将发送给应用程序见解:

enter image description here

如果它没有未配置,则可以将其发送给应用洞察。