2011-03-30 120 views
2

我遇到一個奇怪的現象的請求的突然終止的影響。PHP:由*致命*錯誤

我的應用程序日誌中大量跟蹤日誌的一個文件。 (我不知道如何,我使用我的框架記錄器,可以檢查這個雖然)

問題是,當一個應用程序被終止時致命錯誤(只有致命)[例如 - 「致命錯誤:致電一個成員函數someFunction()一個非對象「],我最終沒有日誌,甚至應該有我的腳本的執行期間記錄的要早得多日誌。

(是的,我想刷新記錄,這並沒有幫助。它看起來像一個致命錯誤,應用程序的終止,不知何故取消寫在應用的早期點進行文件。

?任何想法發生的事情在這裏

謝謝

回答

0

顯然,帕斯卡提到的致命錯誤的病死率,的記錄mecanisms不是100%致命。下面

讓我有甚至致命錯誤我的日誌:

function correctShutdown() 
{ 
    logger->flush(); 
} 

register_shutdown_function('correctShutdown'); 
3

一個致命的錯誤是......呃...... 致命:停止腳本的執行,這將不會做任何事情,應該已經完成。


在你的情況,我想你的日誌框架記錄到內存 - 這個內存日誌只寫入文件時請求的處理完成。
一些測井mecanisms做到這一點,以避免響應的產生期間寫入文件幾次,在不同的點(這意味着保持鎖定該文件,以避免併發問題;或開閉-重啓-reclosing-。 ..它)

當您發生致命錯誤時,應該在響應生成結束時執行的正常操作不會被調用 - 並且因此,內存日誌不會寫入文件。

現在,肯定知道的唯一的辦法是看看你的框架;-)

+0

感謝您對日誌機制的解釋。這正是Yii所做的,這是造成這種情況的根本原因。 – shealtiel 2011-03-30 23:03:47