2010-11-24 5 views
1

大量に問題が発生した場合に、過剰に氾濫したメールボックスを避けるためにEmailTraceListenerを設定するにはどうすればよいですか?(大量の問題で)オーバーフローしたメールボックスを避けるためにEmailTraceListenerを設定するにはどうすればよいですか?

ロギングアプリケーションのブロック構成を使用して、送信されるメッセージ(時間/ 1日あたり)の最大値を設定できますか?

P.S.私はWriteLogを呼び出す前にいくつかの条件で既にそれを行っていますが、このすべてのものを設定に移動したいのですが...

答えて

1

OK。私はこの解決策を書いてくれました。それは十分です(1日最大200):

public class MyEmailTraceListener : EmailTraceListener 
{ 
    public const int MAXPER24HOURS = 200; 
    public static int counter =0; 
    public static DateTime counterReStarted = DateTime.Today; 


    private static bool CanLog() 
    { 
     bool returnValue = false; 
     DateTime today = DateTime.Today; 
     if (counter < MAXPER24HOURS) 
     { 
      counter++; 
      returnValue=true; 
     } 
     else if (today>counterReStarted) 
     { 
      counter = 0; 
      counterReStarted = today; 
      returnValue = true; 
     } 
     return returnValue; 
    } 


    public MyEmailTraceListener(string toAddress, string fromAddress, string subjectLineStarter, string subjectLineEnder, string smtpServer, int id, ILogFormatter formatter) 
     :base(toAddress,  fromAddress,   subjectLineStarter,  subjectLineEnder, smtpServer, id, formatter) 
    { 
    } 

    public MyEmailTraceListener() 
    { 
    } 

    public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) 
    { 
     if (CanLog()) 
      base.TraceData(eventCache, source, eventType, id, data); 
    } 
} 

public class MyTraceListenerAssembler : EmailTraceListenerAssembler 
{ 
    public override TraceListener Assemble(IBuilderContext context, TraceListenerData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache) 
    { 
     MyEmailTraceListenerData data = (MyEmailTraceListenerData)objectConfiguration; 
     return new MyEmailTraceListener(data.ToAddress, data.FromAddress, data.SubjectLineStarter, data.SubjectLineEnder, data.SmtpServer, data.SmtpPort, base.GetFormatter(context, data.Formatter, configurationSource, reflectionCache)); 
    } 
} 

[Assembler(typeof(MyTraceListenerAssembler))] 
public class MyEmailTraceListenerData : EmailTraceListenerData 
{ 
} 
+1

別のアイデア、Hourで最大10のメール、sendmoreメールの場合、1時間ごとに1つのメールでメッセージをグループ化します。 – Kiquenet

2

現在はnot possibleのように見えます。 電子メールのTraceListenerの現在の実装では

は、あなたが送ったメールの数を制限することができ 方法はありません。 しかし、特定の番号が に達したときに リスナーのソースコードを変更して の送信を停止することができます。また、その の振る舞いで カスタムトレースリスナを実装することもできます。

+0

今は可能です。 –

+0

@RomanデフォルトのEmailTraceListenerでは不可能です...あなたはその引用ステートの最後の行として自分自身を実装しています(これはOPが取るルートかもしれません)。 –

+0

あなたの言っていることを理解していますが、カスタムリスナーを実装したことにまだ同意できません。 :) –

関連する問題