带有Application Insights的Log4Net

时间:2015-03-01 23:02:30

标签: c# asp.net azure log4net azure-application-insights

我正在尝试配置我的azure asp.net网站,以便将log4net跟踪发送到Azure Application Insights。我可以在我的azure控制台页面视图等中看到,因此我知道它工作正常。当配置文件处理程序时,我也可以看到log4net跟踪,但是在配置log4net以使用应用程序洞察处理程序时,我没有看到任何log4net条目出现在应用程序洞察仪表板中,在构建或运行时没有错误或警告 - 仪表板中没有任何结果。我查看了Fiddler中的网络流量,我可以看到发送到应用程序洞察的网页浏览数据等,但不是log4net跟踪流量,因此我怀疑这是一个配置问题。

另外我在我的主项目中尝试过TelemetryClient(),我在仪表板中看到了tracetraffic。但是,这不符合我的使用案例,因为TelemetryClient似乎还不支持非asp.net dll(即我的业务和数据逻辑,它们位于不同的dll' s)。

有人提供任何见解或建议吗?

我已经为Microsoft.ApplicationInsights.Log4NetAppender.dll安装了nuget包,我正在使用Microsoft.ApplicationInsights.0.13.2-build00132

根据https://blog.ehn.nu/2014/11/using-log4net-for-application-insights/

,我在web.config中有以下内容
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="aiAppender"/>
    </root>
    <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message%newline"/>
      </layout>
    </appender>
  </log4net>
<configuration>

4 个答案:

答案 0 :(得分:4)

尝试安装Log4Net Appender的预发布版本。

我在步骤created by someone else之后创建了一个规范的ASP.NET MVC示例,但上面遇到了同样的问题。但后来跟着写了in the Application Insights documentation的一些步骤,发现那些指定为log4net appender安装PreRelease包。完成它后,它工作:)

答案 1 :(得分:2)

您的log4net配置正确;我在测试网站上使用它并且它有效。此外,由于您在Fiddler中看到了其他AI数据,因此您的AI也已正确配置。 在这种情况下要寻找的一件事是log4net.Config.XmlConfigurator属性。它是一个程序集级属性,可能需要正确读取log4net配置。

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

请您确定在项目中指定了它并再试一次?

答案 2 :(得分:2)

我在Sitecore网站上将我的Log4Net日志发送到AI时遇到了一些问题。 Sitecore有自己的Log4Net实现,所以它没有使用AI Nuget包。我已经制作了自己的Apprender,我将日志发送给AI。

 public class CustomLogFileAppender : SitecoreLogFileAppender
    {
        protected override void Append(LoggingEvent loggingEvent)
        {
            if (Sitecore.Context.Site != null )
            {

                if(loggingEvent.Level == Level.FATAL)
                {
                    AppsInsightsLogHelper.Critical(loggingEvent.RenderedMessage);
                }

                if (loggingEvent.Level == Level.ERROR)
                {
                    AppsInsightsLogHelper.Error(loggingEvent.RenderedMessage);
                }

                if (loggingEvent.Level == Level.WARN)
                {
                    AppsInsightsLogHelper.Warning(loggingEvent.RenderedMessage);
                }

                if(loggingEvent.Level == Level.INFO)
                {
                    AppsInsightsLogHelper.Info(loggingEvent.RenderedMessage);
                }


            }

                base.Append(loggingEvent);
        }
    }

在sitecore.config中:

<log4net>
    <appender name="LogFileAppender" type="namespace.CustomLogFileAppender, dll name">
      ...
    </appender>
</log4net>

答案 3 :(得分:1)

在我的情况下(我已将Application Insights添加到现有的Web应用程序中)除Microsoft.ApplicationInsights.Log4NetAppender之外,我必须使用NuGet添加Microsoft.ApplicationInsights.Web包。在创建ApplicationInsights.config之后,您需要指定您的InstrumentationKey。

E.g。 of ApplicationInsights.config

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <InstrumentationKey>YOUR KEY HERE</InstrumentationKey>
  <TelemetryModules>
  ...