Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否尝试捕获日志?_C#_.net_Exception_Try Catch - Fatal编程技术网

C# 是否尝试捕获日志?

C# 是否尝试捕获日志?,c#,.net,exception,try-catch,C#,.net,Exception,Try Catch,根据这一回答: 仅当您在日志记录之外确实执行了一些操作时,才应使用try-catch: 如果只记录异常并 把它扔掉。它没有任何意义,代码混乱 但是,在更高级别上不可用的日志记录信息又如何呢? 例如: 如您所见:在我的(完全虚构的)示例中,我记录了有关导致错误的字段的信息。这可能是开始查找错误的一些好信息 因此,尽管我只记录了错误,但这些信息可能非常重要,并在该方法之外丢失 这是对try-catch的有效使用,还是有其他建议的方法来记录?(我不认为总是记录这些信息(无论是否发生错误)是一个有效的解

根据这一回答: 仅当您在日志记录之外确实执行了一些操作时,才应使用try-catch:

如果只记录异常并 把它扔掉。它没有任何意义,代码混乱

但是,在更高级别上不可用的日志记录信息又如何呢? 例如:

如您所见:在我的(完全虚构的)示例中,我记录了有关导致错误的字段的信息。这可能是开始查找错误的一些好信息

因此,尽管我只记录了错误,但这些信息可能非常重要,并在该方法之外丢失


这是对try-catch的有效使用,还是有其他建议的方法来记录?(我不认为总是记录这些信息(无论是否发生错误)是一个有效的解决方案)

您尝试做的事情没有任何错误。另一个问题/答案的想法是,最好在您真正处理错误的地方记录错误。在.NET中,每个异常都包含堆栈跟踪。这意味着上层可以报告生成此错误的代码中的位置。在一个地方而不是在多个地方这样做更有意义。这是他们的想法。

你所做的一切都没有错。另一个问题/答案的想法是,最好在您真正处理错误的地方记录错误。在.NET中,每个异常都包含堆栈跟踪。这意味着上层可以报告生成此错误的代码中的位置。在一个地方而不是在多个地方这样做更有意义。这是他们的想法。

我想你回答了你自己的问题

但是,在更高的实例中不可用的日志记录信息又如何呢

这些信息可能是至关重要的,并在该方法之外丢失

我不喜欢硬而快的“总是做X而从不做Y”,因为有时为了做对您的应用程序最有利的事情,有必要违背所谓的“最佳实践”


如果需要记录信息以解决问题,并且如果不立即记录,则会丢失此信息,请记录此信息。

我想您已经回答了自己的问题

但是,在更高的实例中不可用的日志记录信息又如何呢

这些信息可能是至关重要的,并在该方法之外丢失

我不喜欢硬而快的“总是做X而从不做Y”,因为有时为了做对您的应用程序最有利的事情,有必要违背所谓的“最佳实践”

如果需要记录信息以解决问题,并且如果不立即记录,则会丢失此信息,请记录信息

但是,在更高级别上不可用的日志记录信息又如何呢 实例

您可以在重新引发异常时将这些信息传递回调用方

private void AddSomethingToTable(string tablename, string fieldname) {
  try {
    InsertFieldToTable(tablename, fieldname);
  } catch (Exception ex) {
    string str = string.Format("Could not insert field '{0}' into table '{1}'", fieldname, tablename);
    throw new Exception(str, ex);
  }
}

但是,在更高级别上不可用的日志记录信息又如何呢 实例

您可以在重新引发异常时将这些信息传递回调用方

private void AddSomethingToTable(string tablename, string fieldname) {
  try {
    InsertFieldToTable(tablename, fieldname);
  } catch (Exception ex) {
    string str = string.Format("Could not insert field '{0}' into table '{1}'", fieldname, tablename);
    throw new Exception(str, ex);
  }

}

从您的链接问题:

捕获异常的基本经验法则是,当且仅当您有一种有意义的方法来处理异常时,才捕获异常

我强调了“基本经验法则”,因为它不是法律。这是最好的做法。i、 遵循它,直到你有了不这样做的良好动机

如果捕获异常以包含信息,则可能应该抛出一个新的有意义的异常,其中包含更多上下文信息。比如:

try 
{
    //kldfsdölsdöls
}
catch (Exception ex)
{
    throw new MoreDetailedException("Text with context data", ex);
}

这样,您将获得收集到同一异常中的每个堆栈级别的所有上下文信息(因为您在其中包含了内部异常)。因此,顶层的日志条目将包含同一行中的所有信息。

来自链接问题:

捕获异常的基本经验法则是,当且仅当您有一种有意义的方法来处理异常时,才捕获异常

我强调了“基本经验法则”,因为它不是法律。这是最好的做法。i、 遵循它,直到你有了不这样做的良好动机

如果捕获异常以包含信息,则可能应该抛出一个新的有意义的异常,其中包含更多上下文信息。比如:

try 
{
    //kldfsdölsdöls
}
catch (Exception ex)
{
    throw new MoreDetailedException("Text with context data", ex);
}

这样,您将获得收集到同一异常中的每个堆栈级别的所有上下文信息(因为您在其中包含了内部异常)。因此,顶层中的日志条目将包含同一行中的所有信息。

我们以您建议的类似方式使用Try-Catch块,它对我们很有效。 我们已经实现了ELMAH,它非常适合记录未捕获的错误。通过Try-Catch块中的一行代码,您还可以将捕获的异常写入日志

Catch ex As Exception
            Elmah.ErrorSignal.FromCurrentContext.Raise(ex) 
            Return False
 End Try

错误已被处理(相关函数返回false),用户不会看到死亡的黄色屏幕,我们可以在日志中查找任何错误的完整详细信息。

我们以与您建议的类似方式使用Try-Catch块,它对我们很有效。 我们已经实现了ELMAH,它非常适合记录未捕获的错误。通过Try-Catch块中的一行代码,您还可以将捕获的异常写入日志

Catch ex As Exception
            Elmah.ErrorSignal.FromCurrentContext.Raise(ex) 
            Return False
 End Try

错误已被处理(相关函数返回false),用户不会看到死亡的黄色屏幕,我们可以在日志中查找任何错误的完整详细信息。

我想您回答了自己的问题:“但是在更高的实例中不可用的日志信息怎么办?”。我不喜欢硬而快的“总是做X而从不做Y”,因为有时这是必要的。这也是为什么这里不鼓励提出“最佳实践”问题的原因。如果需要记录信息以解决问题,并且如果不立即记录,则会丢失此信息,那么请记录信息。Th