2012-08-03 17 views
12

kullanırken 'verbose' düzeyine sahip iletileri günlüğe kaydeder. WindowsAzure.Diagnostics'e yazan bir log4net Trace Appender'ı kullanacak şekilde yapılandırdığım bir masmavi işçi rolüm var. Bu, alt rolün RoleEntryPoint'inde aşağıdaki çağrıları yaparak yapılır.log4net traceappender yalnızca Windows Azure DiagnosticsMonitor

using System; 
using Microsoft.WindowsAzure.Diagnostics; 
using log4net.Config; 

namespace XXX 
{ 
    public class WorkerRole : RoleEntryPoint 
    { 
     public override bool OnStart() 
     { 
      var config = DiagnosticMonitor.GetDefaultInitialConfiguration(); 

      config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning; 
      config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5); 

      config.WindowsEventLog.DataSources.Add("System!*"); 
      config.WindowsEventLog.DataSources.Add("Application!*"); 
      config.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Error; 
      config.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(5); 

      DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config); 

     XmlConfigurator.Configure(); 
     } 
    } 
} 

App.config dosyası aşağıdaki şekilde yapılandırıldı:

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger - %message" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

<system.diagnostics> 
    <trace> 
     <listeners> 
      <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> 
       <filter type="" /> 
      </add> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Bunun sonucu bütün mesajları (hatta hataları) "ayrıntılı" seviyesi olarak tablo depolama kaydedilir olmasıdır.

Bunu nasıl düzeltebilirim?

blog gönderisi Birkaç bu sorunla başa
+0

Bu şimdi güncel değil. Örneğin, http://blog.kloud.com.au/2014/10/22/logging-with-log4net-and-azure-diagnostics-on-web-and-worker-roles/ adresine bakın. – Rory

+0

Emin misin? İnsanlar hala Microsoft.WindowsAzure.Diagnostics 2.5.0.0 –

+0

hmmm ile bu sorunu yaşıyor gibi görünüyor:/hayır emin değilim. – Rory

cevap

21

: (here ve here)

  • Bu log4net TraceAppender mesajları Trace.Write için tüm günlük mesajlarını dönüştürür çıkıyor ve DiagnosticMonitorTraceListener tüm Trace dönüştürür olduğunu Mesajları ayrıntılı hale getirin. Bu uzantı sonra benim App.config hayata geçirildi

    using System.Diagnostics; 
    using log4net.Appender; 
    using log4net.Core; 
    namespace XXX.Logging 
    { 
        public class AzureTraceAppender : TraceAppender 
        { 
         protected override void Append(LoggingEvent loggingEvent) 
         { 
          var level = loggingEvent.Level; 
          var message = RenderLoggingEvent(loggingEvent); 
    
          if (level >= Level.Error) 
           Trace.TraceError(message); 
          else if (level >= Level.Warn) 
           Trace.TraceWarning(message); 
          else if (level >= Level.Info) 
           Trace.TraceInformation(message); 
          else 
           Trace.WriteLine(message); 
          if (ImmediateFlush) 
           Trace.Flush(); 
         } 
        } 
    } 
    

    :

    <log4net> 
        <appender name="AzureTraceAppender" type="XXX.Logging.AzureTraceAppender"> 
         <layout type="log4net.Layout.PatternLayout"> 
          <conversionPattern value="%logger - %message" /> 
         </layout> 
        </appender> 
        <root> 
         <level value="ALL" /> 
         <appender-ref ref="AzureTraceAppender" /> 
        </root> 
    </log4net> 
    

benim durumumda cevap Pete McEvoy en çözümünü kullanabilir ve aşağıdaki şekilde TraceAppender uzatmak oldu

+1

Çok kullanışlıdır. Ancak, 'Trace.Write()' aracılığıyla log4net'ten gelen hata ayıklama düzeyindeki mesajları almıyordum. Kodu "else (level> = Level.Debug)" olarak ayarlıyorum ve şimdi akış günlüğü ve tablo depolama alanımda hata ayıklama düzeyindeki iletileri görüyorum. –

+1

Evet, çok kullanışlıdır. Bir yorum: Basit bir Trace.Write (..) Azure akış günlüğünde gösterilmeyecek, böylece son başka şube hiçbir şey yapmıyor. Log4net mesajlarının 5 seviyesini açıkça, 3 Trace seviyesine yansıtmalıyız. –

+0

Bu hile yaptı! –