NLog不会写入文件名包含点的目标文件



当使用"NT AUTHORITYNETWORK service "凭证启动我的windows服务时,我遇到了NLog的一个奇怪问题:如果文件名包含点,它根本不记录任何内容到文件目标。

我在WinServer 2008 R2标准上运行windows服务,启用了。net Framework 3.5 SP1功能,NLog。配置如下:

<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服务(这是在同一台机器上运行相同的凭据)简单地通过改变项目选项中的汇编信息的问题。

任何想法?

启用NLog的内部日志文件后

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

i manage to catch 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文件夹

在我的例子中,它是运行应用程序池的用户。

似乎在某些情况下,你需要特定的用户,我的情况是运行一个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的答案后,我给了Everyone完全的控制权,它工作了,然后改变了寻找真正失踪的用户

最新更新