WebAPI アプリケーションのエラー ログを実行するために、Log4net を使用しています。2 つの log4net アペンダー、smtp を備えた別のサーバーを使用してエラー通知メールを送信する SmtpEmail アペンダー、およびローカルの .txt ファイルに送信される FileAppender があります。私の問題は、FileAppender が期待どおりに log.txt ファイルにすべてを記録しているのに、SmtpEmail アペンダーが機能していないことです。メールが受信されず、エラー メッセージも表示されません。私が気づいたことは、DOMConfigurator.Configure() が戻るのに長い時間がかかることです。それが戻った後、同じ実行中のプロセスの多くがその戻りを続けていることがよくあります。何が問題なのか、または smtp サーバー (以下では「baz.bar.com」と呼びます) への呼び出しが行われているかどうかを監視するためにできることはありますか?
.config ファイル内の関連する log4net コードは次のとおりです。
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="foo@bar.com" />
<from value="foo@bar.com" />
<subject value="Write to AX Error" />
<smtpHost value="baz.bar.com" />
<bufferSize value="1" />
<lossy value="false" />
<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>
<root>
<level value ="DEBUG" />
<appender-ref ref ="FileAppender"/>
<appender-ref ref ="SmtpAppender"/>
</root>
私はユニティを使用しています。私の FileAppender が機能しているので、これが問題であるとは思えませんが、コードは次のとおりです。
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<ILog>().RegisterInstance(LogManager.GetLogger(typeof(ILog)));
return container;
}
private ILog _log;
public LERService(ILog log)
{
_log = log;
}
LERService の関数内でのログへの呼び出しは次のとおりです。
catch(Exception e)
{
_log.Fatal("Cannot submit to client with following exception: " + e.Message, e);
}