2011-03-18 33 views
24

登錄堆棧跟蹤我已經配置PHP來記錄錯誤和我的開發機器上,他們出現在Apache的錯誤日誌爲:怎樣讓PHP在致命錯誤

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error: syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27 
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Stack trace: 
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP 1. {main}() /Users/troelskn/Projects/test/public/index.php:0 

然而,在生產機器(Ubuntu)在錯誤之後沒有堆棧跟蹤,並且在消息中附有引用鏈接。例如。它看起來像:

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error: syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27, referer: http://localhost/ 

如何控制此格式?我非常希望在日誌中提供堆棧跟蹤。

+5

看看這個http://stackoverflow.com/questions/3224809/is-there-a-php-ini-directive-that-enables-stack-traces-on-errors – 2011-03-18 09:34:36

+0

@elzo你很安靜正確 - 這個痕跡確實來自xdebug。你能做出這個答案嗎,我可以接受嗎? – troelskn 2011-03-18 09:45:41

+0

你可以給一個關於如何在apache日誌中記錄php stacktraces的鏈接嗎? – side2k 2012-07-06 09:04:52

回答

16

那麼,作爲已經指出的那樣,你沒有得到現場機器上相同的格式,因爲活的機器還沒有得到Xdebug的安裝。有debug_backtrace但是不會發生致命錯誤。

您可以在活動服務器上安裝了XDebug,但你必須非常小心地將其配置爲不暴露功能除了堆棧跟蹤記錄。在活箱上謹慎使用xdebug可能會帶來安全風險,因爲人們可能啓動遠程調試會話,或者其增強的錯誤消息可能會無意中回顯出代碼的內部細節。

說實話?我認爲你最好的選擇是嘗試重新創建在你的測試服務器上發生錯誤的服務器記錄的錯誤。

編輯補充:忘了提的是,除了是一個安全隱患,Xdebug的也會對你的網站的性能產生負面影響。它以幾種關鍵方式掛鉤到Zend Engine中,以記錄程序狀態並改變它的行爲(例如覆蓋@錯誤抑制),這將對性能產生不可避免的影響。嘗試在測試環境中複製問題比在調試環境中添加調試工具要好得多。

+0

附加註釋:XDebug的與剖析開啓將成爲性能額外討厭,並且還將搞亂你的服務器的磁盤。我看到服務器崩潰,磁盤空間不足(這是一個虛擬機),因爲一個不小心的管理員開啓了這個功能。 – pgr 2017-05-02 12:15:03