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