3

自分のユーザー名で 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 呼び出しを続行しようとすると、無期限にハングし、サービス コンテナーに応答しなくなります。

一体何が起こっているのですか?ロギングが機能する場合とそうでない場合があり、ロギングが原因でサービス全体が動作しなくなっているようです。誰にもアイデアはありますか?

4

0 に答える 0