我应该在扔它或接住它的地方记录错误


Should I log error where I throw it or where I catch it?

我应该像这样记录错误吗:

try {
    addOne();
} catch (Exception $e) {
}
function addOne($number) {
    if (empty($number)) {
        Log::instance()->add(Log::ERROR, $e->getMessage());
        throw Exception('The incoming number is empty');
    }
    return $number+1;
}

还是我在哪里这样抓到的?

try {
    addOne();
} catch (Exception $e) {
    Log::instance()->add(Log::ERROR, $e->getMessage());
}
function addOne($number) {
    if (empty($number)) {
    throw Exception('The incoming number is empty');
    }
    return $number+1;
}

就像 Rami 一样,使用描述性消息将错误/异常抛出在方法本身中,并将错误记录在 catch 块中是一个很好的解决方案。它将允许您只有一个日志记录指令来记录代码中可能发生的不同类型的异常。抛出异常时进行日志记录将使日志记录消息成倍增加并增加代码大小,而没有任何附加值,此外,如果您在多个 catch 块中使用该函数,您将无法跟踪它在哪个块中失败。

你应该在被捕获时记录一个错误(在 catch 中),否则即使失败并且不会记录任何错误,也会调用你的方法,除非你想记录它已经成功,然后你要么把它放在现在的位置,要么使用 finally 来记录它。