2010-10-10 11 views

Odpowiedz

15

Artykuł CodeProject wygląda obiecująco.


przez dziedziczenie z wymaganym bazowej appender (SmtpPickupDirAppender w moim przypadku) i dodając właściwość ILayout jest możliwe, aby zmienić ten temat w sposób dopisywania.

public class SmtpSubjectLayoutPickupDirAppender : log4net.Appender.SmtpPickupDirAppender 
{ 
    public SmtpSubjectLayoutPickupDirAppender() 
     : base() 
    { 

    } 

    public ILayout SubjectLayout 
    { 
     get; 
     set; 
    } 

    protected override void Append(log4net.Core.LoggingEvent loggingEvent) 
    { 
     if (this.BufferSize <= 1 && this.SubjectLayout != null) 
     { 
      StringWriter subjectWriter = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); 
      this.SubjectLayout.Format(subjectWriter, loggingEvent); 
      this.Subject = subjectWriter.ToString(); 
     } 

     base.Append(loggingEvent); 
    } 
} 

Można to skonfigurować, określając właściwość subjectLayout w celu przesłonięcia obiektu domyślnego.

<appender name="SmtpPickupDirAppender" type="namespace.for.SmtpSubjectLayoutPickupDirAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="test logging message" /> 

    <subjectLayout type="log4net.Layout.PatternLayout, log4net"> 
     <conversionPattern value="Logging message - %message"/> 
    </subjectLayout> 

    <pickupDir value="C:\SmtpPickup" /> 
    <bufferSize value="1" /> 
    <lossy value="true" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="WARN"/> 
    </evaluator> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> 
    </layout> 
</appender> 
+3

przypadku właściwości niestandardowych ThreadContext.Properties [ "myVal"] = "niezależnie"; –

+0

'public ILayout SubjectLayout' musi być' public PatternLayout SubjectLayout', aby to działało. – TheCodeKing

1

Here is kolejny przykład SmtpAppender z niestandardowymi tematami.

0

ponieważ poprzedni answeres że sugeruje użycie Nuget wersję SmtpAppenderWithSubjectLayout potrzebuje log4net wersja> 1.2.1, użyłem kodu źródłowego Nuget ale zmodyfikowany używać log4net 1.2.1

public class SmtpAppenderWithSubjectLayout : SmtpAppender 
    { 
     public PatternLayout SubjectLayout { get; set; } 

     protected override void SendBuffer(LoggingEvent[] events) 
     { 
      PrepareSubject(events); 

      base.SendBuffer(events); 
     } 

     protected virtual void PrepareSubject(IEnumerable<LoggingEvent> events) 
     { 
      var subjects = new List<string>(); 

      foreach (LoggingEvent @event in events) 
      { 
       if (Evaluator.IsTriggeringEvent(@event)) 
       { 
        var subjectWriter = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); 
        SubjectLayout.Format(subjectWriter, @event); 
        subjects.Add(subjectWriter.ToString()); 
       } 
      } 

      Subject = string.Join(", ", subjects.ToArray()); 
     } 
    } 
Powiązane problemy