NLog无法将日志写入文件名包含点的目标文件中。

7
当我使用“NT AUTHORITY\NETWORK SERVICE”凭据启动Windows服务时,我在NLog方面遇到了一个奇怪的问题:如果文件名包含点,则它根本不会将任何内容记录到文件目标中。
我在我的WinServer 2008 R2 Standard上运行Windows服务,启用了.NET Framework 3.5 SP1功能,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服务配置中日志文件扩展名的问题(该服务在同一机器上以相同的凭据运行),只需在项目选项中更改程序集信息即可。

有任何想法吗?

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文件夹即可。


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的回答后,我给了每个人完全控制权,然后它起作用了,然后我改变了查找真正缺失的用户。


你好,请问你能告诉我如何给每个人完全控制权吗? - refresh
请查看此教程,https://www.youtube.com/watch?v=ytmYVbMEsGg,并将特定用户类型更改为“所有人”。 - bresleveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接