2011-01-25 91 views
1

我正在使用log4net進行日誌記錄和發送電子郵件。我需要根據不同的流程發送不同配置的不同電子郵件。例如,當我的某個方法完成處理時,它會向X發送郵件,並且當我的服務成功完成時,它會向Y發送另一封郵件。我認爲我需要使用不同的appender和過濾器,但是我不能得到正確配置他們。如何使用StringMatchFilter通過log4net中的消息內容將日誌記錄事件發送到不同日誌?

我嘗試了以下方法,嘗試應用StringMatchFilter,以便包含「mandatory」的消息不會傳遞給Y,並且包含「successful」的消息不會傳遞給X,但是沒有運氣。我也不確定這種過濾是否是做這種配置的正確方法。

<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="[email protected]" /> 
     <from value="[email protected]" /> 
     <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="[email protected]" /> 
     <from value="[email protected]" /> 
     <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> 

您認爲問題是什麼?

謝謝。

回答

1

首先,evaluator告訴緩衝appenders何時刷新。從你的配置看,我不認爲你在緩衝。 (所以你可以擺脫bufferSizelossy參數)。我看到你的appender過濾器鏈條有要求的DenyAllFilters。但是,你的根記錄器的配置沒有表現出水平,嘗試添加

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

一般情況下,我不會讓登錄到基於消息文本的特定附加器的決定。看起來你有一個操作的高級服務類。如果您需要發送的其他消息具有相同的功能,並且您按照typename命名了記錄器,則可以爲每個記錄器指定一個appender。

<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> 
相關問題