6

当我使用 NLog 2.0.1 捕获异常时,我正在寻找一种记录表达性消息的方法,例如

try {
    ....
}
catch(Exception ex) {
    logger.ErrorException("Error with query {0}", query, ex);
}

但是 NLog 不支持。发生在我身上的其他形式是

logger.ErrorException(  String.Format("Error with query {0}", query)) , ex);

或者

logger.Error("Error with query {0} {1} {2}", query, ex.Message, ex.StackTrace);

或者

logger.Error("Error with query {0}", query);
logger.ErrorException("", ex);

或者

LogEventInfo ei = new LogEventInfo(LogLevel.Error, logger.Name, null, 
                         "Error with query {0}", new object[] { query }, ex); 
logger.Log(ei);

但是似乎没有什么比调用更简单logger.Error () 了 目前,第一个选项是我最喜欢的,尽管格式化一个可能不会被使用的字符串:

  • 第二个选项不使用异常的布局选项。
  • 第三个在日志中创建了两个条目,可能会令人困惑。
  • 第四个选项不太清楚。

还有一些吗?

4

2 回答 2

5

更新,

从 NLog 4.0 开始,这是可能的

logger.Error(ex, "Error with query {0}", query);

请参阅新闻文章 - 一致的异常记录

于 2016-08-23T22:36:38.933 回答
0

没有其他覆盖。你运气不好。

你的第二个例子看起来不错。

当我在 Visual Studio 中查看时,Error()有 42 个不同的签名

ErrorException()只有一个。

从以下链接您可以看到:(单击“错误”和“错误异常”链接)

http://nlog-project.org/documentation/v2.0.1/html/AllMembers_T_NLog_Logger.htm

于 2013-09-16T14:14:51.743 回答