9

Log4Net Config Examples Web ページでは、SmtpAppender のセットアップ方法の例を示しています。

そこで、次の設定を app.config ファイルに追加すると、警告以上のログが記録されたときに電子メールが正常に送信されます (これは良いことです)。

<appender name="EmailAppender" type="log4net.Appender.SmtpAppender">
  <to value="me@mycompany.com" />
  <from value="me@mycompany.com" />
  <subject value="test logging message" />
  <smtpHost value="smtpserver.mycompany.com" />
  <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>

しかし、差出人の値は私の電子メール アドレスでハード コードされています。

私のアプリケーションは WinForms アプリであり、ユーザーの PC に展開される予定なので、どのユーザーが警告/エラーに遭遇したかを知ることは非常に便利です。

From 値が現在のユーザーの電子メール アドレスを使用するように Log4Net SmtpAppender を設定することは可能ですか?

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

4

3 に答える 3

6

2つの問題があります

1) ユーザーの電子メール アドレスの特定。それらがドメインの一部である場合は、試すことができます

  System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress

2)。Log4netで使用します。プロパティを使用してこれを行うことができるはずです。

app.config を変更した場合

<from value="me@mycompany.com" />

<from type="log4net.Util.PatternString" value="%property{From}" />

プログラムに行を追加して、プロパティを設定します。

log4net.GlobalContext.Properties["From"] = 
   System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress ;

バッファ サイズを 1 に設定する必要がある場合もあります。

安全のために、エラー メッセージの一部としてユーザー名も含めることをお勧めします。

このアプローチの欠点は、差出人アドレスが欠落しているか正しくない場合、メールが失われる可能性があることです。

于 2013-01-10T20:05:09.087 に答える
4

たくさんのGoogleを使った後、AppenderSkeleton抽象クラスをベースとして使用して新しいカスタムSMTPアペンダーを作成する方法を示すこの素晴らしいCodeProjectの記事を最終的に見つけました。

これは単純で、実行時にFromプロパティが動的に設定されるように変更できます。また、Subjectプロパティにパターンを渡す方法も示しているため、Eメールの件名にログに記録されたイベントレベルやその他の情報を含めることができます。

例えば

<subject type="HHR.log4net.Layout.PatternLayout, HHR.log4net">
   <conversionPattern value="%date %level %exceptType at [%logger] on %property{log4net:HostName} by %username" />
</subject>
于 2013-01-11T08:50:39.303 に答える