【问题标题】:NLog file target writes only one recordNLog 文件目标只写一条记录
【发布时间】:2015-05-24 19:19:33
【问题描述】:

每当我的应用程序在我们的托管服务提供商的基础架构上的测试、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)工作正常,这确实是文件目标的问题。而且由于内部日志记录仅限于文件目标,我看不到如何找到问题的原因

【问题讨论】:

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


    【解决方案1】:

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

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

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

    编辑:按照 cmets 中的建议,我打开了 ${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对该文件夹的写入权限之后。

    【讨论】:

    • 这很有趣 - 似乎第一个日志是使用不同的帐户编写的,然后是后续的。您能否将有关当前线程标识的日志信息添加到日志中?
    • 你的意思是${identity}?将在下一次服务器更新时添加它,看看它的输出是什么。
    • 是的,${identity} 应该揭示发生了什么:) 请稍后发布结果。
    • 部分是的 :) 但我仍然不明白为什么以前只记录了一条消息(而不是三条)。我需要检查在模拟线程时检查了哪些权限(当用户登录时,因为这可能是未创建日志的原因)。您能否粘贴当前的日志文件夹权限:icacls <log-folder>? - 删除您认为机密的任何信息
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多