1

PHPで書かれたログモジュールをテストしています。

  1. Web サーバーで発生するトランザクションが多すぎます。
  2. すべてのトランザクションが同じファイルに書き込みます。(log.txt)
  3. このトランザクションを複数の行で同じファイルに記録するにはどうすればよいですか?

以下のログ例。

12 月 5 日 01:50:02 [info] REQ[1111111111111]: param=1

12 月 5 日 01:50:02 [情報] REQ[2222222222222]: param=2

12 月 5 日 01:50:02 [情報] RES[2222222222222]: res=20

12 月 5 日 01:50:02 [情報] RES[1111111111111]: res=10

わかりました、uniqid() で解決策を見つけました。

ただし、タイムスタンプに基づいているため、同じ時間と同じマシンでの一意の巨大なリクエストではありません。

PHP はスレッドをサポートしていません。他の言語 (C、JAVA など) の場合、最善の解決策は [thread id] 各スレッドまたはプロセスを使用することだと思います。

PHPに関するアイデアはありますか?

下手な英語でごめんなさい。

4

2 に答える 2

2

まず、uniqid('', true)冗長性を持たないのに十分なエントロピーが提供されているかどうかを確認します。

次に、セッションで人々を追跡してみてください。これにより、個人とトランザクションを個別に識別できます。

于 2012-12-04T17:25:58.827 に答える
1

ユーザーのユーザー ID を使用できます。ユーザーは常に一意ですよね?一意性を高めるには、ユーザー ID または電子メール ID をハッシュ化し、現在のマイクロタイムを追加してログ ファイルで使用します。マイクロタイムは連続したリクエスト間で確実に変化するため、ユーザーは繰り返しリクエストを送信します。

$id=$userid.$emailid.uniqid();
$uid=md5($str);

これは、小さなループ内で使用すると大きな問題になる可能性があります。小さなループ内では、マイクロタイムはほとんど変化しないためです。

于 2014-04-11T03:00:23.497 に答える