Jak określić układ i wygląd strony wynikowej dla e-maili?Konfigurowanie lub rozszerzanie obiektu log4net SmtpAppender o niestandardowe obiekty
Rozmiar bufora musi być mniejszy lub równy 1, aby nie nastąpiło buforowanie.
Jak określić układ i wygląd strony wynikowej dla e-maili?Konfigurowanie lub rozszerzanie obiektu log4net SmtpAppender o niestandardowe obiekty
Rozmiar bufora musi być mniejszy lub równy 1, aby nie nastąpiło buforowanie.
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>
Here is kolejny przykład SmtpAppender z niestandardowymi tematami.
Można go pobrać z Nuget
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());
}
}
przypadku właściwości niestandardowych ThreadContext.Properties [ "myVal"] = "niezależnie"; –
'public ILayout SubjectLayout' musi być' public PatternLayout SubjectLayout', aby to działało. – TheCodeKing