2012-02-06 4 views
0

로그 수준이> = WARN 일 때만 전자 메일을 보내고 두 번째는 모든 시간을 보내지 만 동시에 두 시간은 보내지 않는 두 개의 smtp 어 펜더를 포함하도록 log4net을 구성 할 수 있습니까?log4net smtpappender 대상은 로그 수준을 기준으로합니다.

<appender name="SmtpAppenderWarn" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Import completed with warnings/errors" /> 
    <smtpHost value="localhost" /> 
    <bufferSize value="512" /> 
    <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> 
<appender name="SmtpAppenderSuccess" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Import completed successfully" /> 
    <smtpHost value="localhost" /> 
    <bufferSize value="512" />  
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger: %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
    <levelToMatch value="INFO" /> 
    </filter>  
</appender> 

나는 내 응용 프로그램은 내가 가진 :

Log.Info("Importer is starting..."); 
//my logic 
//if warn Log.Warn("Warning..."); 
Log.Info("Import finished"); 

그래서 나는 정보 모든 시간을 사용하고 있습니다. 이제 WARN이 발생하면 두 메시지가 전송됩니다. 물론 성공 정보가있는 사람은 보내지 않았 으면합니다.

답변

0

귀하의 펜더는과 같이 최소/최대 값을 가질 수 있습니다

<levelMin value="INFO" /> 
<levelMax value="INFO" /> 

<levelMin value="WARN" /> 
<levelMax value="WARN" /> 

그래서 당신은 다른 범위에 대해 서로 다른 어 펜더를 사용할 수 있습니다. 나는 이것이 당신을 위해 일해야한다고 생각합니다. 설정 파일에 다음

namespace MyProject 
{ 
    public class SmtpAppenderInfoOnly : SmtpAppender 
    { 
     protected override void SendBuffer(log4net.Core.LoggingEvent[] events) 
     { 
      foreach (var loggingEvent in events) 
      { 
       if (loggingEvent.Level != Level.Info) 
        return; 
      } 

      base.SendBuffer(events); 
     } 
    } 
} 

을 그리고 :

+0

와 같으므로 두 번째 필드 만 갖고 싶지 않으므로 작동하지 않습니다. WARNs뿐만 아니라 더 높은 레벨을 위해서 – christof

+0

이것은 작동하지 않습니다. –

0

나는 무시 log4net SendBuffer 방법으로 문제를 해결 한

<appender name="SmtpAppenderSuccess" type="MyProject.SmtpAppenderInfoOnly,MyDll"> 

SendBuffer이 취소 될 때 센드 메일 메소드가 실행되지 않습니다 그런 식으로.

관련 문제