9

統計データをライブ Apache access_log ファイルに書き込む必要があります (access_log ファイル内の特定の行をカウントする別のプロセスがあり、別のプロセスに定期的に報告します)。

現在、phpで次のようにして、access_logファイルへのエントリを強制しています。

file("http://127.0.0.1/logme.php?stuff_that_I_can_watch_here");

logme.php は何もせず、200 の成功で空を返します。

上記の手法の問題は、Apache サーバーへのすべての要求に対して、ログに書き込むために別の要求が生成されることです。そのため、必要な Apache サーバーが 2 倍になります。

サーバーが積み重なると、Apache サーバーへの単純で通常は高速なローカル呼び出しに 5 秒以上かかります。

問題を引き起こさずに access_log ファイルに直接書き込むことはできますか、それとも syslog() や error_log() と同様の php を使用して apache_log ファイルに書き込む方法がありますか?

4

3 に答える 3

9

apache_note( http://php.net/apache_note ) を使用CustomLogして値をメモに書き込み、LogFormat( %{NOTE_NAME}n) ( http://httpd.apache.org/docs/2.2/mod/mod_log_config.html ) を使用してログに記録できます。新しいキー。アクセス ログを解析するプログラムは、新しいログ パラメータも読み取ることができます。

于 2012-08-27T16:13:55.093 に答える
2

access_log に直接書いてもいいですか

access_log に直接書き込むことはできますが、これを行っても問題ありません。
実行中のApacheは複数のプロセスを生成する可能性が
あり、PHPのような遅いプロセスを使用して書き込み用にファイルをロックすると、ロギング速度がさらに遅くなります.

またはphpを使用して同じ効果を達成する簡単な方法はありますか

PHP を使用しないでください。要求が要件を満たす場合は、追加のカスタム ログを追加してください。
これはより適切な方法であり、このカスタム ログには、静的ファイル アクセスがログに記録されていないなど、より少ない行が含まれている必要があります。これにより、後でログの解析が直接改善されます。

于 2010-12-17T14:02:39.753 に答える
1
<?php
  $h = fopen('/path/to/access_log', 'a');
  fwrite($h, 'Message');
  fclose($h);
?>

他の人はすでにデザインについてコメントしています。Apache access_log は、Apache がアクセスを記録するためのものです。

さまざまな監視、パフォーマンス分析、フォレンジックの目的のために、1 つのアプリで約 12 個のカスタム ログ ファイルを使用しています。目的ごとに 1 つのログ ファイルを使用すると、ログの分析が容易になります。

于 2010-12-17T13:44:14.710 に答える