【发布时间】: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" 是否会导致问题?但在我们的例子中,异步是强制性的:(
-
对此有什么结论吗?我有同样的问题,但没有使用异步标志,所以这不是问题。我们大量使用它,实际上丢失了相当多的日志条目。