【问题标题】:NLog not logging everything when necessaryNLog 在必要时不记录所有内容
【发布时间】:2021-08-14 10:35:25
【问题描述】:

我有一个程序意外崩溃。我已经让 NLog 向我提供有关它在哪里崩溃的信息,但它没有达到它的目标,因为它在崩溃前最多记录 30 英寸。 所以我必须改变一些东西。

我已经看到应该有来自here 的命令 Nflush 但事实上没有

我有版本 4.7.10。

但如果是的话,我可能会在一些战略点上使用。

所以我的问题是:如何冲洗? 还有其他方法可以让 NLog 更频繁地刷新吗?

谢谢

帕特里克

【问题讨论】:

  • 如果崩溃不在日志中,请尝试安装未处理的异常处理程序并从那里记录。也不要忘记关闭日志。见docs.microsoft.com/en-us/dotnet/api/…nlog-project.org/documentation/v4.3.0/html/…
  • 感谢您的帮助,我已经编辑了我的问题。至于您的答案,我已经有了,但似乎不起作用。无论如何,我想刷新和关闭,但正如上面编辑的那样,我似乎没有这些命令。
  • 屏幕截图是从ILogger 实例还是LogManager 截取的?
  • 啊,谢谢一百万,所以我必须做 LogManager.Flush() 和 LogManager.Shutdown()。同样来自stackoverflow.com/questions/59773319/…,我看到了如何改进它的写作
  • 应用程序可能会在自动关机发生之前崩溃。现在你正试图解决一个问题,在你解决关键问题之前你不应该担心性能。稍后您可以决定是否要使同花成为永久功能。

标签: c# exception crash nlog flush


【解决方案1】:

带有智能感知建议的屏幕截图来自NLog Logger-object。 NLog.LogManager.Flush() 是一个静态方法。

当收到应用程序即将退出的通知时,NLog 会自动尝试刷新。这是通过挂钩 AppDomain.ProcessExit + AppDomain.DomainUnload 来完成的

这种自动刷新/关闭通常适用于在 Windows 上运行的 .NetFramework。但是当使用 NetCore 在其他平台上运行时,AppDomain-events 可以在应用程序开始关闭之前为fired very early。从而导致 NLog 在应用程序仍在关闭时停止记录。微软似乎正在努力改进这种行为,但不确定 Net60 是否会包含这些修复程序。 NLog.LogManager.AutoShutdown = false 告诉 NLog 用户将明确地 handle flush/shutdown

简单的解决方案就是使用 NLog FileTarget 或 NLog ConsoleTarget(它们会自动刷新),而不使用 <targets async="true">。如果在异国平台上运行,微软未能实现正确的进程退出信号,则配置NLog.LogManager.AutoShutdown = false

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多