自分のユーザー名で Windows サービス アプリケーションを実行しています (installutil でインストール)。
これが私の開始/停止イベントのオーバーロードです:
protected override void OnStart(string[] args)
{
try
{
Debugger.Launch();
}
catch (Exception ex)
{
logger.Fatal("...");
throw;
}
}
protected override void OnStop()
{
logger.Trace("service stopped.");
}
logger
次のように取得された NLog Logger インスタンスです。
private static Logger logger = LogManager.GetCurrentClassLogger();
これが私のものNLog.config
です:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true">
<!--
See http://nlog-project.org/wiki/Configuration_file
for information on customizing logging rules and outputs.
-->
<targets>
<target xsi:type="Debugger" name="debugger_target" />
<target xsi:type="Chainsaw" name="chainsaw_target" address="udp4://localhost:4141"/>
<!--
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="chainsaw_target"/>
</rules>
</nlog>
サービスは正常に起動し、デバッガーは期待どおりにアタッチされます。そこから続行すると、サービスの開始が完了します。
次にサービスを停止すると、ブレークポイントがOnStop
ヒットしますが、logger.Trace 呼び出しを続行しようとすると、無期限にハングし、サービス コンテナーに応答しなくなります。
一体何が起こっているのですか?ロギングが機能する場合とそうでない場合があり、ロギングが原因でサービス全体が動作しなくなっているようです。誰にもアイデアはありますか?