我正在经历一个奇怪的情况。
我的应用程序将大量跟踪日志记录到一个文件中。(我不确切知道如何,我使用我的框架记录器。不过可以检查一下)
问题是,当应用程序因致命错误(仅致命)[示例 - “致命错误:在非对象上调用成员函数 someFunction()”] 终止时,我最终没有日志,甚至没有日志在我的脚本执行期间已经记录了很多。
(是的,我尝试刷新日志,这也无济于事。看起来应用程序因致命错误而终止,以某种方式取消了在应用程序早期完成的文件写入。
有什么想法吗?
谢谢
我正在经历一个奇怪的情况。
我的应用程序将大量跟踪日志记录到一个文件中。(我不确切知道如何,我使用我的框架记录器。不过可以检查一下)
问题是,当应用程序因致命错误(仅致命)[示例 - “致命错误:在非对象上调用成员函数 someFunction()”] 终止时,我最终没有日志,甚至没有日志在我的脚本执行期间已经记录了很多。
(是的,我尝试刷新日志,这也无济于事。看起来应用程序因致命错误而终止,以某种方式取消了在应用程序早期完成的文件写入。
有什么想法吗?
谢谢
致命错误是......好吧......致命:它停止脚本的执行,它不会做任何应该做的事情。
在您的情况下,我想您的日志记录框架会登录到内存中 - 并且此内存中的日志仅在请求处理完成时才写入文件。
一些日志机制会这样做,以避免在响应生成期间的不同点多次写入文件(这意味着保持文件锁定,以避免并发问题;或打开-关闭-重新打开-重新关闭-... )
当您收到致命错误时,不会调用应在响应生成结束时完成的正常操作——因此,内存中的日志不会写入文件。
现在,确定的唯一方法是查看您的框架的日志记录机制;-)
显然,帕斯卡提到的致命错误的致命性并不是 100% 致命的。
即使出现致命错误,以下内容也允许我拥有我的日志:
function correctShutdown()
{
logger->flush();
}
register_shutdown_function('correctShutdown');