Nlog没有记录堆栈跟踪信息

4
我的NLog配置如下:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="file" xsi:type="File" fileName="${basedir}/log${shortdate}.txt" archiveAboveSize="500000" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="10" layout="${date:format=s}|${level}|${callsite}|${identity}|${message}|${exception:format=stacktrace}"/>
      <!--<target name="console" xsi:type="Console" />-->
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="file" />
      <!--<logger name="*" minlevel="Debug" writeTo="console" />-->
    </rules>
  </nlog>

但是当异常发生时,堆栈跟踪没有被记录。 NLog存在漏洞吗?

我已经创建了一个Nlog的包装器,并按照以下方式进行记录:

public void Error(string message, Exception ex)
    {
        logger.Error(message, ex);
    }

我在日志中收到了消息,但没有收到堆栈跟踪。

提前致谢。


1
TrustyCoder - 你能否发布一下使用NLog输出异常的代码?此外,你是否在NLog中得到任何输出? - Dan Snell
2个回答

7

在你的布局中尝试使用以下内容:

${exception:format=ToString}

1
@TrustyCoder:这很令人困惑。我也在使用NLog 2.0,而且这对我来说是有效的。你确定你调用了正确的方法重载(即带有异常参数的方法)吗? - StriplingWarrior

4
你尝试过使用logger.ErrorException(message, ex);代替logger.Error吗?这样做可以更好地记录异常信息。

@SerG 什么是过时的?ErrorException?有没有相关的文档记录? - Snixtor
@Snixtor 是的。它在代码中用属性[Obsolete("Use Error(String, Exception) method instead.")]进行了记录。 - SerG
@Serg 深入源代码,情况并不像你想的那么简单。下载 v3.2.0 版本的源代码,Logger.ErrorException 方法未被标记为过时https://github.com/NLog/NLog/releases/tag/v3.2.0.0。虽然你引用的属性在源代码中是可见的,在 ILogger 接口中https://github.com/NLog/NLog/blob/master/src/NLog/ILogger.cs,但该接口不属于 3.2.0 版本!进一步地,即使在主干中 ILogger.ErrorException 被标记为过时,Logger.ErrorException 却没有。这绝对不是明确的。 - Snixtor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接