我正在重构一个相当大的Web应用程序。主要问题之一是不一致的错误处理,我正在尝试提出一个明智的策略。我已经通过set_error_handler创建了一个自定义错误处理程序,该处理程序从本质上转变了ErrorExceptions中的 PHP错误以及一个直接从Exception继承的自定义基本异常类。
在生产环境中,我正在通过set_exception_handler使用通用异常捕获功能,并且将要添加异常记录*的功能。我的难题是在基本异常类或全部捕获中执行实际日志记录的位置。
我想到了将其记录在全部功能中的几个原因:
- 代码中有很多异常需要转换为基本异常类的适当子代。在此之前,并非所有异常都会被记录。
- 总括而言,以某种方式感到更自然,基本异常类不应该仅仅这样做。(这可能是一个单一的责任原则,但可能只是一种误导)
以及登录基本异常类的原因之一:
- 目前,全部收集仅用于生产。将其引入我们的其他环境(开发,测试)很容易,但是这需要进行一些调整,因为错误在每个环境中的处理方式不同,在生产中将其转换为404/503错误页面。
在哪里记录异常有可接受的做法吗?
*日志记录将首先涉及写入文本文件,并且可能会演变成发送某些类型异常的邮件。
@unholysampler的回答提示了一些说明:
我面对的是2 * 10 ^ 6 sloc代码库,其中包含许多我无法控制的第三方内容,而我确实有一些代码可以控制PHP中的preddates异常。而且还有一些糟糕的最新代码,我们正从长期的沉重压力中恢复过来,在这些压力下,我们实际上不得不停止思考并被黑了。
我们正在积极进行重构以解决所有不一致问题,并引入明智的错误处理方法,但这将需要一些时间。在达到正确处理错误的程度之前,我对该怎么办更感兴趣。在某个时候,我可能会问另一个关于明智的例外策略的问题。
记录背后的主要动机是,每当生产中发生任何问题时,都会在我的手机上收到一封电子邮件。我不在乎数据转储是否会很大,如果确实如此,我将有一份cron作业,不时地删除旧的。