11

結果の電子メールの件名のレイアウトとconversionPatternを指定するにはどうすればよいですか?

BufferSizeは、バッファリングが発生しないように1以下である必要があります。

4

4 に答える 4

16

CodeProjectの記事log4netNonBufferedSmtpAppenderWithSubjectLayoutは有望に見えます。


必要なベースアペンダー(私の場合はSmtpPickupDirAppender)から継承し、ILayoutプロパティを追加することで、AppendメソッドのSubjectを変更できます。

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);
    }
}

これは、subjectLayoutプロパティを指定して、デフォルトのサブジェクトをオーバーライドすることで構成できます。

<appender name="SmtpPickupDirAppender" type="namespace.for.SmtpSubjectLayoutPickupDirAppender">
    <to value="to@domain.com" />
    <from value="from@domain.com" />
    <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>
于 2010-10-10T20:55:05.450 に答える
1

これは、カスタムサブジェクトを使用したSmtpAppenderの別の例です。

于 2011-02-09T15:48:42.493 に答える
1

Nugetからダウンロードできます

ソースコードと例

于 2013-05-26T18:32:40.937 に答える
0

NuGetバージョンのSmtpAppenderWithSubjectLayoutの使用を提案する以前の回答にはlog4netバージョン>1.2.1が必要なため、NuGetソースコードを使用しましたが、log4net1.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());
    }
}
于 2014-06-29T20:43:33.253 に答える