NLog文件目标只写一条记录

时间:2015-03-21 12:05:13

标签: .net .net-4.5 nlog windows-server

每当我的应用程序在我们的托管服务提供商的基础结构上的Test,Preprod或Prod服务器(Windows 2012 R2)上运行时,所有文件目标都只写入一个日志条目,然后在没有任何原因指示的情况下停止工作。如果我删除了日志文件(或者如果它被存档,例如第二天),则会写入一个新的日志文件,但只会写入一个日志文件。

此处的NLog论坛也描述了同样的问题,但没有解决方法或解释:http://nlog-forum.1685105.n2.nabble.com/Only-one-entry-written-to-log-file-td7399596.html

我尝试了以下事项:

  • 启用NLog的内部日志记录。这里的问题相同,带有内部日志记录的日志文件只包含一个日志项。内部日志记录只能使用文件目标进行设置,因此无法监听另一个目标(如DebugView)上的内部日志记录。
  • 使用Sysinternals DebugView查看NLog的内部错误消息,但没有。
  • 检查日志文件的只读属性,但设置为false。
  • 将所有目标切换为异步。没效果。

还有其他想法吗?我无法在这些服务器上运行Visual Studio,因此我无法使用NLog源对其进行调试。

因为一个愚蠢的错误而切换到log4net会很遗憾。

编辑:我必须补充一点,其他目标(如DebugView或ADO.NET)工作正常,这确实是文件目标的问题。并且因为内部日志记录仅限于文件目标,所以我看不出如何找到问题的原因

1 个答案:

答案 0 :(得分:0)

似乎是权限问题。一旦我授予用户组IIS_IUSRS对日志文件夹的写权限,一切都按预期工作。

我只是想知道,为什么要用一个条目写日志文件?

我从未想过权限问题,因为我看到IIS可以写日志文件。

编辑:根据评论中的建议,我打开了${identity}日志,并收到了以下值:

前3行:

notauth::

以下所有行:

auth:ApplicationCookie:{LOGIN_OF_CURRENT_USER}

`{LOGIN_OF_CURRENT_USER}是当前登录用户的电子邮件地址。

编辑2:以下是icacls结果:

D:\IIS_Server\wwwroot\tgw\logs NT AUTHORITY\IUSR:(OI)(CI)(F)
                               BUILTIN\IIS_IUSRS:(OI)(CI)(F)
                               NT AUTHORITY\IUSR:(I)(OI)(CI)(RX)
                               BUILTIN\IIS_IUSRS:(I)(OI)(CI)(RX)
                               NT SERVICE\WMSVC:(I)(OI)(CI)(F)
                               NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
                               BUILTIN\Administrators:(I)(OI)(CI)(F)
                               BUILTIN\Users:(I)(CI)(AD)
                               BUILTIN\Users:(I)(CI)(WD)
                               BUILTIN\Users:(I)(OI)(CI)(RX)

请注意, 后我明确授予该文件夹的IIS_IUSRS个写权限。