2013-05-06 327 views
0

我有一些日誌使用syslog-ng的聚集了監控服務器上它們是:PHP錯誤日誌

  • 複製到本地每天旋轉的文件,
  • 存儲到一個MySQL數據庫。

不幸的是,沒有錯誤發生,因爲它們被評估爲PHP通知(see this post)。

因此,我想知道什麼是正確的方式來使用Syslog-NG來處理PHP錯誤,以便它們實際上被識別爲錯誤。

+0

你看過[syslog](http://php.net/manual/en/function.syslog.php)嗎? – quickshiftin 2013-05-07 04:11:31

回答

0

這裏有幾件事/選項。該文章沒有提到配置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

0

我注意到這篇文章是通過我的博客鏈接引用日誌。系統日誌的問題在於:您無法保證您的郵件實際上會到達到日誌存儲區。當然,PHP可以修補給你一個錯誤信息,但是如果你需要事務日誌,你可以直接將它們存儲到數據庫中。

如果你堅持這樣做,here's a library我已經幫助開發了將取代PHP本地syslog接口。它完全用PHP編寫,所以你不需要編譯任何東西。

我希望這會有所幫助。