1

ロギングと電子メールの送信に log4net を使用しています。さまざまなプロセスに従って、さまざまな構成でさまざまな電子メールを送信する必要があります。たとえば、メソッドの 1 つが処理を終了すると X にメールを送信し、サービスが正常に終了すると別のメールを Y
に送信します。フィルターを使用して別のアペンダーを使用する必要があると思いますが、到達できません。それらを適切に構成します。

「必須」を含むメッセージが Y に配信されず、「成功」を含むメッセージが X に配信されないように、次のことを試し、StringMatchFilter を適用しようとしましたが、うまくいきませんでした。また、この種のフィルタリングがこの種の構成を行う正しい方法であるかどうかもわかりません。

<log4net>

    <appender name="ManFieldMailAppender" type="log4net.Appender.SmtpAppender,log4net">
        <evaluator type="log4net.Core.LevelEvaluator">
            <threshold value="WARN"/>
        </evaluator>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <acceptOnMatch value="true" />
        </filter>
        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="successfully" />
            <acceptOnMatch value="false" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <to value="x@xxx.com" />
        <from value="aaa@aaa.com" />
        <subject value="Products not made online" />
        <smtpHost value="Host" />
        <authentication value="1"/>
        <username value="uid" />
        <password value="pwd" />
        <port value="25"/>
        <bufferSize value="1" />
        <lossy value="false" />
        <layout type="log4net.Layout.PatternLayout,log4net">
            <conversionPattern value="%newline %date %message%newline%newline%newline" />
        </layout>
    </appender>

    <appender name="ServiceFinishedMailAppender" type="log4net.Appender.SmtpAppender,log4net">
        <evaluator type="log4net.Core.LevelEvaluator">
            <threshold value="WARN"/>
        </evaluator>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <acceptOnMatch value="true" />
        </filter>
        <filter type="log4net.Filter.StringMatchFilter">   
            <stringToMatch value="mandatory" />
            <acceptOnMatch value="false" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <to value="y@yyy.com" />
        <from value="bbb@bbb.com" />
        <subject value="Product Publish Service has successfully finished operating" />
        <smtpHost value="Host" />
        <authentication value="1"/>
        <username value="uid" />
        <password value="pwd" />
        <port value="25"/>
        <bufferSize value="1" />
        <lossy value="false" />
        <layout type="log4net.Layout.PatternLayout,log4net">
            <conversionPattern value="%newline %date %message%newline%newline%newline" />
        </layout>
    </appender>

    <root>
        <appender-ref ref="ManFieldMailAppender" />
        <appender-ref ref="ServiceFinishedMailAppender"/>
    </root>

</log4net>

問題は何だと思いますか?

ありがとうございました。

4

1 に答える 1

1

最初に、evaluatorいつフラッシュするかをバッファリングアペンダーに伝えます。構成の外観から、バッファリングしているとは思いません。(そのため、 パラメータbufferSizelossyパラメータも削除できます)。アペンダー フィルター チェーンには必要なDenyAllFilters. ただし、ルートロガー構成にレベルが表示されていません。追加してみてください

<root>
    <level value="ALL" />
    <!-- appender-refs as normal -->
</root>

一般に、メッセージ テキストに基づいて特定のアペンダーにログを記録する決定を下すことはありません。操作の 1 つに高レベルのサービス クラスがあるようです。送信する必要がある他のメッセージにも同じことがあり、ロガーをタイプ名で命名している場合は、ロガーごとにアペンダーを指定できます。

<logger name="MyCompany.Product.Whatever">
    <level value="WARN" />
    <appender name="ManFieldMailAppender" type="...">
        <!-- the rest of the configuration, without filtering goes here -->
    </appender>
</logger>

<logger name="MyCompany.Services.Publish">
    <level value="WARN" />
    <appender name="ServiceFinishedMailAppender" type="...">
        <!-- the rest of the configuration, without filtering goes here -->
    </appender>
</logger>
于 2011-06-16T04:29:55.453 に答える