我有一些日誌使用syslog-ng的聚集了監控服務器上它們是:PHP錯誤日誌
- 複製到本地每天旋轉的文件,
- 存儲到一個MySQL數據庫。
不幸的是,沒有錯誤發生,因爲它們被評估爲PHP通知(see this post)。
因此,我想知道什麼是正確的方式來使用Syslog-NG來處理PHP錯誤,以便它們實際上被識別爲錯誤。
我有一些日誌使用syslog-ng的聚集了監控服務器上它們是:PHP錯誤日誌
不幸的是,沒有錯誤發生,因爲它們被評估爲PHP通知(see this post)。
因此,我想知道什麼是正確的方式來使用Syslog-NG來處理PHP錯誤,以便它們實際上被識別爲錯誤。
這裏有幾件事/選項。該文章沒有提到配置php.ini使用syslog進行php內部的錯誤日誌記錄。你需要設置
error_log = syslog
我假設被提到的文章中,它說
PHP有記錄與該通知錯誤 級別的一切的令人討厭的習慣。
你可以打開錯誤日誌記錄到系統日誌這種方式,並按照系統日誌巫術那篇文章中建議,或者你可以做到這一點PHP的方式,和我的意思是使用更多的PHP來實現映射PHP錯誤之間& syslog錯誤級別。
通過set_error_handler定義自定義錯誤處理程序,然後內部處理程序,特定的PHP錯誤映射到某個特定的系統日誌錯誤級別如
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
switch ($errno) {
case E_USER_ERROR:
$str = "<b>My ERROR</b> [$errno] $errstr<br />\n" .
" Fatal error on line $errline in file $errfile" .
", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n" .
"Aborting...<br />\n";
syslog(LOG_CRIT, $errstr)
exit(1);
break;
case E_USER_WARNING:
// ...
}
它也可能是一個不錯的主意,以做同樣的set_exception_handler。
我注意到這篇文章是通過我的博客鏈接引用日誌。系統日誌的問題在於:您無法保證您的郵件實際上會到達到日誌存儲區。當然,PHP可以修補給你一個錯誤信息,但是如果你需要事務日誌,你可以直接將它們存儲到數據庫中。
如果你堅持這樣做,here's a library我已經幫助開發了將取代PHP本地syslog接口。它完全用PHP編寫,所以你不需要編譯任何東西。
我希望這會有所幫助。
你看過[syslog](http://php.net/manual/en/function.syslog.php)嗎? – quickshiftin 2013-05-07 04:11:31