1

我有一个使用 TopShelf 库的 Windows 服务应用程序,我在 cfn-init 期间使用您从 topshelf 获得的方便的命令行功能将它安装在 AWS 中。

C:\handy_service\> HandyService.exe install start

这基本上将服务安装在注册表中,然后调用sc start,但它非常有用,因为它检查服务名称是否与您期望的匹配,并且它允许您配置服务将运行的用户使用漂亮的流式 API。

如果服务配置为一般使用 NLog,安装程序代码还会将一些诊断日志写入 NLog。

问题是这样的:安装程序作为 AMI 启动的默认本地管理员帐户运行,并且 NLog 文件由该用户创建。当服务作为网络服务用户启动时,它没有写入 NLog 日志文件的权限。

如何让我的服务写入日志文件?我考虑过以编程方式设置权限,但它看起来很讨厌,我必须确定日志文件名,因为它是根据 ec2 实例 ID 动态生成的。此外,第一次创建日志文件的时间也不是很明显。我可能会采用的最简单的方法是拥有两个 NLog.config,并在刷新记录器后在安装结束时切换一个。但是因为在服务启动和安装程序退出之间存在一些时间重叠,我预计我会在这里丢失几行日志记录。

任何干净的建议将不胜感激!

4

1 回答 1

2

最后,我在部署时设置了日志文件夹的权限。它实际上非常简单icacls,例如 rake 中只有几行,假设您知道您的日志文件夹将在哪里:

sh %{icacls "#{logs_dir}" /grant "#{username}":(OI)(W)}

不调用UseNLog()服务配置也是一个简单的选项,在这种情况下,任何安装时错误都会出现在 Windows 事件日志中。

于 2014-02-28T15:47:01.297 回答