0

Syslog-NG を使用して監視サーバーに収集されたログがいくつかあります。

  • ローカルの日替わりファイルにコピーされ、
  • MySQL データベースに保存されます。

残念ながら、これらは PHP 通知として評価されるため、エラーは発生しません (この記事を参照)。

したがって、実際にエラーとして認識されるように Syslog-NG を使用して PHP エラーを処理する正しい方法は何だろうと思っています。

4

2 に答える 2

0

ここにいくつかのもの/オプションがあります。その記事では、 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で同じことをするのもいい考えかもしれません。

于 2013-05-07T04:22:38.173 に答える
0

あなたがリンクした私のブログの参照ログから、この投稿に気付きました。syslog の問題は、メッセージが実際にログ ストアに到達するという保証がないことです。確かに、PHP にパッチを当ててエラー メッセージを表示することはできますが、トランザクション ログが必要な場合は、データベースに直接保存する方がはるかに優れています。

あなたがこの方法を主張するなら、私が開発を手伝った PHP のネイティブ syslog インターフェイスを置き換えるライブラリがあります。これは完全に PHP で記述されているため、何もコンパイルする必要はありません。

これが役立つことを願っています。

于 2013-05-10T20:46:57.423 に答える