目标:将日志条目从NLog转发到Azure Application Insights。从:https://github.com/Microsoft/ApplicationInsights-dotnet-logging
开始我创建了一个非常基本的控制台应用程序:
TelemetryConfiguration.Active.InstrumentationKey = "my instrumentation key";
Logger logger = LogManager.GetLogger("Example");
logger.Info("Hello World");
Console.ReadLine();
使用以下app.config:
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
</startup>
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
<extensions>
<add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>
<targets>
<target type="ApplicationInsightsTarget" name="aiTarget" layout="${longdate} ${level} ${threadid} ${logger} ${message} ${exception:format=ToString}" />
<target name="console" xsi:type="ColoredConsole" layout="${longdate} ${level} ${threadid} ${logger} ${message} ${exception:format=ToString}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="aiTarget" />
<logger name="*" minlevel="Trace" writeTo="console" />
</rules>
</nlog>
</configuration>
但是,当ColoredConsole目标按预期工作时,Azure Application Insights中没有日志消息。只有在我拨打TelemetryConfiguration.Active.TelemetryChannel.Flush();
时,邮件才会到达。
答案 0 :(得分:3)
在客户端将数据发送到门户之前,会对缓存项进行缓冲(默认情况下为30秒,请参阅the source code)。因此,您必须至少保持控制台打开一段时间或手动拨打Flush()
或将developer mode设置为true:
TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;
修改强>
可以使用多个渠道,例如InMemoryChannel
或ServerTelemetryChannel
。它们都有30秒的默认缓冲区间隔。
InMemoryChannel
例如有一个公共属性TimeSpan SendingInterval
,所以如果你将TelemetryConfiguration.Active.TelemetryChannel
强制转换为实际的实现,你应该能够改变缓冲区间隔。
请参阅ServerTelemetryChannel.MaxTelemetryBufferDelay和InMemoryChannel.SendingInterval。