2017-02-23 91 views
1

我想知道是否有人知道一種方法來改變錯誤消息在PHP中記錄的默認方式。希望這可以應用於所有消息,致命錯誤,警告等,以及任何時候我的腳本調用error_log。擴展默認的php錯誤和error_log

目前默認的錯誤消息,在日誌中顯示爲

[19-Feb-2017 15:38:42 America/Vancouver] Could not post employee data - no rows submitted 
[20-Feb-2017 11:12:34 America/Toronto] PHP Warning: array_splice() expects parameter ... 

但是這將是大大有益的,在我看來,如果我能擁有它也包括了一些變數,我已經存儲在$_SESSION爲每個用戶,如用戶的登錄名和公司。因此,例如錯誤可能會輸出如下

[19-Feb-2017 15:38:42 America/Vancouver] [CompanyXYZ/bob_smith] Could not post employee data - no rows submitted 
[20-Feb-2017 11:12:34 America/Toronto] [OtherCompany/jimbo_redneck] PHP Warning: array_splice() expects parameter ... 

這樣的事情是否存在於PHP世界中?

+1

「無法發佈員工數據 - 未提交行」來自哪裏?這不是一個PHP錯誤。無論生成哪裏,都在其中添加其他變量。 – AbraCadaver

+0

對不起,我應該澄清那個錯誤信息,那是我自己使用error_log的錯誤信息。我的項目隨處可見,我希望php能夠修改默認錯誤消息和我自己的方法,而不必重寫每個error_log實例。 – OrangeLefty

回答

1

您可以create your own error handling routine。您應該可以將所需的任何數據添加到錯誤消息中。像這樣的東西應該讓你開始:

<?php 
function my_handler($errno , $errstr, $errfile, $errline, $errcontext) 
{ 
    $msg = "Hey I got an error of type $errno ($errstr) from $errfile line $errline!"; 
    $msg .= "Here's some more info: $_SESSION[foo]"; 
    error_log($msg); 
    return true; 
} 
set_error_handler("my_handler"); 

致命錯誤只是由代碼問題,如語法錯誤引起的。它們不會發生在用戶身上,所以你不需要擔心抓住它們。

請注意things change considerably in PHP 7

+0

嘿謝謝,我想我完全忽略了這個功能!如果我理解正確,在實現自定義錯誤處理程序後,我應該使用'trigger_error(「哦,沒有錯誤在...」)''而不是'error_log(「哦,沒有錯誤在...」)''在我的項目讓它不繞過自定義處理程序? – OrangeLefty

+0

'error_log()'只是直接寫入日誌文件,所以如果你想記錄一個PHP不認爲錯誤的「錯誤」,那麼'trigger_error()'就是你在這裏尋找的東西,並且讓它通過你的自定義處理程序。 – miken32