我有一个在我的用户名下运行的 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 调用时,它会无限期挂起并且对服务容器没有响应。
到底是怎么回事?有时日志记录有效,有时无效,现在似乎日志记录导致整个服务无法正常运行。有人有想法么?