记录捕获和未捕获的异常?

Tow*_*wer 5 php logging exception

我最近一直在与Exceptions合作.我认为记录未被捕获的异常是有意义的,因为它极大地帮助开发人员通过简单地查看异常日志来处理源中可能存在的问题.但是,当处理异常时,是否需要再记录它?是的,在某种程度上.如果你有"坏"的开发人员编写有错误的代码,那么只需捕获异常将使错误"消失".例如:

try
{
 fopen('/path/to/file','w');
}
catch (Exception $e)
{
 // Display an error to user
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是PHP.关键是,这种代码,imo,不应该存在.异常意味着异常并且很少发生,但是使用这些代码它们的发生率很少.例如,开发人员不检查文件是否存在,并且他不检查他是否有权写入文件.相反,它应该是:

try
{
 if (file_exists('/path/to/file') && is_writable('/path/to/file'))
  fopen('/path/to/file','w');
 else
  // Display an error to user about file not existing or not being writable
}
catch (Exception $e)
{
 // Display an error to user about an unexpected error
}
Run Code Online (Sandbox Code Playgroud)

这现在非常有意义.仅当异常(例如服务器崩溃,断电等)时抛出并捕获异常.但是,如果开发人员使用Exceptions进行所有操作并省略检查,那么我有办法记录捕获的异常吗?

我不希望开发人员将所有内容放在try-catch块中以"解决"问题.我希望他们明确检查他们应该检查的内容 - 并为硬件故障,服务器崩溃等异常情况留下例外.

tro*_*skn 12

异常意味着异常并且很少发生,但是使用这些代码它们的发生率很少.

我认为这是一种误解.异常点是将理想流与错误处理流分开.


Mat*_*all 6

您可以使用PHP的set_exception_handler函数,这将允许您提供将捕获所有未捕获的异常的函数,但您必须为脚本中捕获的所有那些添加手动日志记录.


Dyc*_*cey 1

如果您正在寻找的话,我认为不存在魔术方法类型的方法。但是是否可以将整个应用程序包装在一个try... catch...结构中?根据定义,任何到达最外层的异常都try... catch...不会被捕获......或者我错过了重点;-)

  • set_exception_handler (http://www.php.net/manual/en/function.set-exception-handler.php) (2认同)