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