2

データベース (mysql) で維持するカスタム ログがいくつかあります。これらのログを使用して、zend フレームワーク アプリケーションでの最近のエラーと電子メール アクティビティを追跡します。

これらのログ タブで複数の読み取り/書き込みを実行すると、これらのログがデータベースに負荷をかけることが最近わかりました。また、mysql INSERT を実行する必要があり、これらのログ テーブルが他の SELECT クエリによってロックされることがあるため、アプリケーションの速度が低下します。

次のように、アダプタを使用Zend_Logしてログの書き込みを実行します。

    $columnMapping = array('url' => 'url', 'userAgent' => 'userAgent', 'info' => 'info', 'reffer' => 'reffer', 'userId' => 'userId', 'priority' => 'priority','dateInserted' => 'dateInserted', 'message' => 'message');
    $writer_db = new Zend_Log_Writer_Db($db, 'log', $columnMapping);

また、毎晩ログから古いエントリを一掃するカスタム cron ジョブもありますが、これもデータベースにストレスを与えます。

これらのログに対する唯一の要件は、複数のサーバーがこれらのログを書き込んでいるため、中央の場所から検索できることです。

zend フレームワーク アプリケーションでログを書き込むための代替手段はありますか? Zend_Logこの場合に役立つ良いアダプターはありますか?

4

1 に答える 1

2

NTP 経由ですべてのサーバー間で共有される「ドライブ」にファイル ロガーを使用できます。標準の UNIX 検索ツール (grep、awk など) で検索できます。

別の解決策は、Syslog ライターを使用して、ログ メッセージを受信する Syslog サーバーをセットアップすることです。syslog 形式を分析できるアプリケーションは多数あります。

3 番目のオプションは、MongoDB をログのストレージ機能として使用することです。MongoDB に書き込む Log Writer を実装する方法を説明する記事を次に示します。MongoDB には「非同期挿入」機能があるため、ログ エントリがデータベースに書き込まれるまでアプリケーションを待つ必要はありません。

于 2012-05-02T13:26:42.683 に答える