NLog 文件目标只写入一条记录
NLog file target writes only one record
每当我的应用程序 运行 在我们托管服务提供商的基础设施上的测试、预生产或生产服务器(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)工作正常,这确实是文件目标的问题。而且由于内部日志记录仅限于文件目标,我看不出如何找到问题的原因
似乎是权限问题。一旦我授予用户组 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
文件夹写入权限后。
每当我的应用程序 运行 在我们托管服务提供商的基础设施上的测试、预生产或生产服务器(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)工作正常,这确实是文件目标的问题。而且由于内部日志记录仅限于文件目标,我看不出如何找到问题的原因
似乎是权限问题。一旦我授予用户组 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
文件夹写入权限后。