7

当使用“NT AUTHORITY\NETWORK SERVICE”凭据启动我的 Windows 服务时,我遇到了一个奇怪的 NLog 问题:如果文件名包含点,它根本不会将任何内容记录到文件目标。

我在启用了 .NET Framework 3.5 SP1 功能的 WinServer 2008 R2 Standard 上运行 Windows 服务,NLog.config 如下:

<targets>
  <target xsi:type="File"
    name="f" 
    fileName="${basedir}/logs/${shortdate}.txt"
    encoding="utf-8"
    concurrentWrites="true"
    keepFileOpen="false"
    layout="${longdate} ${uppercase:${level}} ${message}"/>
</targets>
<rules>
  <logger name="*" minlevel="Trace" writeTo="f" />
</rules>

经过一些谷歌搜索和配置试验后,我想出了一个解决方法,在fileName参数中不包含文件扩展名,它工作得很好,解决了问题,但看起来不像是一个体面的解决方案。

让这个问题对我来说更像是一个奇怪的魔法的原因是,我设法解决了我的第二个 Windows 服务(它在具有相同凭据的同一台机器上运行)的配置中的日志文件扩展名的问题,只需通过更改项目选项中的装配信息。

有任何想法吗?

4

2 回答 2

16

启用 NLog 的内部日志文件后

<nlog 
  internalLogFile="c:\temp\nlogproblems.txt"  
  throwExceptions="true"  
  xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

我设法抓住了UnathorizedAccessException

2013-04-17 11:06:14.0445 Error Exception in asynchronous handler 
  NLog.NLogRuntimeException: Exception occurred in NLog --->
  System.UnauthorizedAccessException: Access is denied. 
  (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

logs这导致我应该修复文件夹权限的结论。

终于不再有奇怪的魔法了,我只需要允许NETWORK SERVICE写入logs文件夹。

于 2013-04-17T05:16:50.920 回答
0

在我的情况下,它是运行应用程序池的用户。

似乎在某些情况下您需要特定用户,我的案例正在运行 IHttpHandler 并且我从 ProcessRequest 调用了其他方法,并且由于某种原因从 ProcessRequest 本身它工作正常,但从我得到的子方法

Exception in asynchronous handler 
  NLog.NLogRuntimeException: Exception occurred in NLog --->
  System.UnauthorizedAccessException: Access is denied. 
  (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

在阅读了 7kun 的答案后,我给了每个人完全的控制权并且它起作用了,然后改变以找到真正失踪的用户

于 2015-02-10T13:32:05.557 回答