Syslog-NG を使用して監視サーバーに収集されたログがいくつかあります。
- ローカルの日替わりファイルにコピーされ、
- MySQL データベースに保存されます。
残念ながら、これらは PHP 通知として評価されるため、エラーは発生しません (この記事を参照)。
したがって、実際にエラーとして認識されるように Syslog-NG を使用して PHP エラーを処理する正しい方法は何だろうと思っています。
ここにいくつかのもの/オプションがあります。その記事では、 php.iniを構成して syslog を使用して php 内のエラー ログを記録することについては触れていません。設定する必要があります
error_log = syslog
私はそれがそれが言う記事でほのめかされたと仮定しています
PHP には、すべてを NOTICE エラー レベルでログに記録するという厄介な習慣があります。
その方法で syslog へのエラー ログをオンにして、その記事で提案されている syslog ブードゥーに従うことも、PHP の方法で行うこともできます。つまり、より多くの PHP を使用して、PHP エラーと syslog エラー レベル間のマッピングを実装することを意味します。
set_error_handlerを介してカスタム エラー ハンドラーを定義し、ハンドラー内で、特定の PHP エラーを特定の syslog エラー レベルにマップします。
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で同じことをするのもいい考えかもしれません。
あなたがリンクした私のブログの参照ログから、この投稿に気付きました。syslog の問題は、メッセージが実際にログ ストアに到達するという保証がないことです。確かに、PHP にパッチを当ててエラー メッセージを表示することはできますが、トランザクション ログが必要な場合は、データベースに直接保存する方がはるかに優れています。
あなたがこの方法を主張するなら、私が開発を手伝った PHP のネイティブ syslog インターフェイスを置き換えるライブラリがあります。これは完全に PHP で記述されているため、何もコンパイルする必要はありません。
これが役立つことを願っています。