首页 文章

带有Application Insights的Log4Net

提问于
浏览
21

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

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

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

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

根据http://geekswithblogs.net/jakob/archive/2014/11/09/using-log4net-for-application-insights.aspx,我在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

    尝试安装Log4Net Appender的PreRelease版本 .

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

  • 2

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

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

    您能否确保在项目中指定它并再试一次?

  • 1

    我在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>
    
  • 4

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

    例如 . ApplicationInsights.config的

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

相关问题