你如何强制PDOexception记录错误? (PHP)

时间:2012-12-30 05:32:25

标签: php logging pdo

我想使用PDO记录数据库错误,但我不想重复添加日志记录到我的catch块。有没有办法强制记录PDOException?

或者我是否必须创建一个扩展PDO的类,然后创建一个扩展PDOExceptions并使用它们的类。如下所示:

try {
  $dbconn = new logPDO ( ... );
  //...
} catch (LogException $e ) {
  //..
}

我想避免创建新类只是为了解决这个问题。我无法记录PDOException似乎很奇怪。

2 个答案:

答案 0 :(得分:0)

最简单的方法是创建一个带PDOException并执行记录逻辑的函数。

function logPdo(PDOException $e) {
  // log stuff w/ the exception instance..
}

这也可能是一个类的静态方法。如果您想要更多OO解决方案,则继承PDO并使其捕获PDOException,然后抛出具有log方法或类似方法的子类或自定义Exception类,这是一种合理的方法。

答案 1 :(得分:0)

整个设置看起来很不寻常。
您不希望将日志记录添加到catch块中,但希望以数字添加这些块。

根据我的理解,处理错误的一般方法是单个应用程序范围的异常处理程序,它完成所有工作 - 在屏幕上显示错误或记录它并在向浏览器发送503时。任何错误,不仅是PDO错误。因为我发现每个错误都非常有用,值得平等对待。

为此,必须设置其own error handler以抛出异常并设置异常处理程序以记录错误。并为整个应用程序设置全局try-catch块。

虽然对于应用程序可以存活的这些少数非关键部分,可以使用带有记录器的try-catch块,但同样,我不明白为什么只有PDO - 我将整个包裹这样的块,并记录每个发生的错误,不仅是PDO-risen。因此,某些不同类型的异常(仅触发记录但不会暂停catch上的应用程序)可以解决问题。