我遇到了一个奇怪的情况。
我的应用程序将大量跟踪日志记录到文件中。 (我不确切知道如何使用我的框架记录器。虽然可以检查一下)
问题是,当应用程序被致命错误(仅致命)终止时[例如 - “致命错误:在非对象上调用成员函数someFunction()”,I最终没有日志,甚至是在我的脚本执行期间应该更早记录的日志。
(是的,我试图刷新日志,这也没有帮助。看起来像致命错误导致应用程序终止,不知何故取消写入在应用程序的早期点完成的文件。
这里有什么想法?
谢谢
答案 0 :(得分:3)
致命错误是......好...... 致命:它会停止执行脚本,这不会做任何应该完成的事情。
在您的情况下,我认为您的日志框架会记录到内存中 - 并且只有在完成请求处理时才会将此内存中日志写入文件。
一些日志记录机制可以做到这一点,以避免在生成响应期间的不同点上多次写入文件(这意味着保持文件锁定,以避免并发问题;或者打开 - 关闭 - 重新打开-reclosing -... it)
当您收到致命错误时,不会调用应在响应生成结束时执行的正常操作 - 因此,内存中的日志不会写入文件。
现在,唯一可以确定的方法是查看框架的日志记录; - )
答案 1 :(得分:0)
显然,Pascal提到的致命错误的死亡率并非100%致命。
以下允许我将日志记录在致命错误上:
function correctShutdown()
{
logger->flush();
}
register_shutdown_function('correctShutdown');