我在我的C#控制台应用程序中使用Log4Net,并希望记录的事件也出现在Application Insights中。
我已添加了Application Insights以及Application Insights Log4Net Appender。
我已按照此处的说明操作:https://jan-v.nl/post/using-application-insights-in-your-log4net-application没有运气。
Log4Net正在正常登录。但是,当我转到Application Insights仪表板时,我看到了这一点:"应用程序在应用程序中没有数据。"
在我的主要cs文件的开头,我得到了这个:
var telemetryClient = new TelemetryClient { InstrumentationKey = ConfigurationManager.AppSettings["applicationInsights"] };
最后,有这样的:
telemetryClient.Flush();
在我的app.config文件中,我有这个:
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="FileAppender" />
<appender-ref ref="aiAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="C:\logs\logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
</layout>
</appender>
<appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
</log4net>
当我运行应用程序时,我在输出窗口中看到了这种情况:
Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Message","time":"2017-07-04T10:26:15.7741453Z","tags":{"ai.internal.sdkVersion":"log4net:2.2.0-220","ai.cloud.roleInstance":"xxx","ai.user.id":"AzureAD\\xxx"},"data":{"baseType":"MessageData","baseData":{"ver":2,"message":"xxx","severityLevel":"Information","properties":{xxx"}}}}
我错过了什么?
答案 0 :(得分:2)
Log4Net AI appender不会使用您创建的TelemtryClient。
像这样设置AI Instrumentation Key:
TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings["applicationInsights"];
请参阅https://github.com/Microsoft/ApplicationInsights-dotnet-logging
答案 1 :(得分:1)
自从提出这个问题以来,ApplicationInsights 已经发展。由于各种原因,原来的静态 TelemetryConfiguration.Active 现在已经过时了。那些仍在尝试快速设置 log4net 配置的人可以这样做(在他们的 log4net 配置文件中):
<appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
<InstrumentationKey value="12345678-7946-1234-1234-8b330fbe1234" />
</appender>
答案 2 :(得分:0)
适用于 dotnetcore 2.2 和 Microsoft.Extensions.Logging.ApplicationInsights 2.10
我还有一个问题,我的日志没有发送到AI。找了半天。在看到调试调试过程中执行了对AI和遥测通道的调用后,我走上了这条路,但是当仅运行api时,未发送任何数据。
我发现它与所使用的遥测通道有关(在Microsoft的在线文档中可以看到遥测通道是什么,但它充当您的应用程序和Azure应用程序见解之间的中间件)。
如果您在DEV计算机上工作(没有SERVERS!),则可以将此标志设置为true
在StartUp.ConfigureServices中:
#if DEBUG
TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;
#endif
然后,我所有的日志记录都发送到了AI,可以在跟踪表中找到,并且可以针对每个请求看到它。
我在他们的GIT页面上找到了答案:https://github.com/Microsoft/ApplicationInsights-dotnet/issues/964
另一个注意事项:默认级别为“警告”,要将其设置为较低级别,请将其添加到program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.ConfigureLogging(logging =>
{
// Optional: Apply filters to configure LogLevel Trace or above is sent to
// ApplicationInsights for all categories.
logging.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
// Additional filtering For category starting in "Microsoft",
// only Warning or above will be sent to Application Insights.
logging.AddFilter<ApplicationInsightsLoggerProvider>("Microsoft", LogLevel.Warning);
})
.UseStartup<Startup>();
}