【问题标题】:nLog missing log datanLog 缺少日志数据
【发布时间】:2012-03-21 14:19:42
【问题描述】:

有时 nLog 没有记录所有调试信息(调试文件中缺少一些 log.Debug...),有谁知道为什么会发生这种情况以及如何避免这种情况?

这是我的 nLog 配置

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <variable name="appTitle" value="Service"/>
  <targets async="true">
    <target name="fallbackDebug" xsi:type="FallbackGroup" returnToFirstOnSuccess="true">
      <target xsi:type="File" fileName="C:\Logs\${date:format=yyyyMMdd}_Debug.txt" layout="..."/>
      <target xsi:type="File" fileName="C:\Logs\${date:format=yyyyMMdd}_Debug_bu.txt" layout="..."/>
    </target>
  </targets>
  <rules>
    <logger name="*" levels="Trace,Debug,Error,Fatal"       writeTo="fallbackDebug" />
  </rules>
</nlog>

在我使用的代码中

private static Logger log = LogManager.GetCurrentClassLogger();
...
log.Debug("Some debug info");

谢谢!

【问题讨论】:

  • 你怎么知道缺少了什么?您能否提供一个重现该问题的小型示例应用程序?
  • 我无法提供重现该问题的小应用程序,因为它只发生在我们非常大的系统中,并且我们在短时间内记录了大量的调试信息。我知道缺少某些东西,因为例如,在数据库中创建订单之前,我正在记录该操作。如果我查看数据库,会显示顺序,但不会显示对应于该操作的日志。
  • 听起来很奇怪。您可以在该特定位置添加一些独立于 NLog 的简单日志记录,然后查看它是否有效。如果它不起作用,这不是 NLog 的问题,而是您的代码似乎执行了一些插入订单的其他代码。如果您的简单日志记录有效,但 NLog 无效,则证明 NLog 遗漏了一些东西。
  • 我会尝试,但我确定 nLog 有问题,因为订单创建在项目中的一个位置,并且与订单创建是连续的:writeLog();创建订单(); ...所以必须执行才能创建订单日志。我不确定 async="true" 是否会导致问题?但在我们的例子中,异步是强制性的:(
  • 对此有什么结论吗?我有同样的问题,但没有使用异步标志,所以这不是问题。我们大量使用它,实际上丢失了相当多的日志条目。

标签: c# logging nlog


【解决方案1】:

你必须在最后调用LogManager.Flush()方法。

示例:

private static Logger log = LogManager.GetCurrentClassLogger();
...
log.Debug("Some debug info");
...
LogManager.Flush();

【讨论】:

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