0

前文 -

オンライン Java アプリケーション (Tomcat->Java->Mysql) を SAAS (Software As A Service) として実行しています。これは基本的に、ユーザーが携帯電話を使用して当社のサービス/サーバーに接続し、ユーザーが認証されるとデータ転送が行われるモバイル ユーティリティ サービスです。このサービスはデータ センターで実行され、アプリ サーバーはロード バランサーなどによってリクエストを処理します。アプリケーションのライブ更新は、実際にサービスを完全に停止することなく、サーバーを追加および削除し、ロード バランサーによって要求を迂回させることによって行われます。

シナリオ -

ログから、サービスに常時接続しているユーザーが少なくとも 1 万人いることがわかります。そのため、アップグレードのためにサービスを停止することは現実的ではありません。私は Java の API (HashMap、ArrayList など) を使用して多くのメモリ内キャッシュを使用しています。memcache などのキャッシング フレームワークはまだ使用していません。また、多くの携帯電話を使用してこのサービスに接続しているため、すべての携帯電話をサポートすることは非常に困難です。

使用事例

ユーザーがサービスが機能していないと苦情を申し立てた場合、ユーザーの最後に何が問題なのかを見つけるために、彼 (および彼だけで、他の人ではなく) のログを有効にする必要があります。彼のクライアントは携帯電話であり、これはオンライン サービスであるため、サーバーでログを有効にすることはできず、すべてのユーザーに対してログが有効になり、ログがすぐにロールオーバーされたり、ユーザーのデータが失われたりすることはありません。ロガーによって生成されたテキストの全範囲で簡単に追跡できます。また、クライアント側のエラーのスクリーン ショットを要求することもできません (一部の携帯電話にはこの機能がありますが、ほとんどの携帯電話にはこの機能がなく、問題が発生する携帯電話です)。そのため、他のユーザーは影響を受けずに、ライブ サーバーで処理を行う必要があります。

実行時にパラメーターを指定して、1人のユーザーのみのログを有効にするさまざまな方法は何ですか? (ユーザーが実際にサーバーに接続されている場合)

急いでやってみた簡単なこと

1)最初は空の単一列テーブルを保持し、一部のユーザーがサービスが機能していないと言うと、テーブルにユーザー名を追加します。特定の間隔でテーブルをスキャンするスレッドは、ユーザー名を取得し、ユーザー固有のログの出力を開始します。ログが出力されたら、エントリを削除します。しかし、スレッドが来てアクションを実行するまで待つ必要があります。また、ポリシーとして、リクエスト/レスポンス スレッド以外のスレッドを生成/実行することは想定されていません。

2)空のファイルを保持してエントリを追加し、ポイント1で述べたdbテーブルと同じ方法に従います

3)管理者が認証したプライベートサーブレットにリクエストを発行し(ユーザーはこれにアクセスできず、内部IPのみが許可されます)、ログに記録されるユーザー名をパラメーター値として渡し、後で再度呼び出してユーザーを削除します

他の/より良い方法はありますか?

PS。java.util.logging.Logger をロガーとして使用する

4

1 に答える 1

0

高レベルの概要

  • ログに記録する必要があるユーザーに属しているかどうかを検出する要求の開始
  • スレッド ローカルを true に設定します。
  • ロガーは現在のレベルのスレッド ローカルをチェックする必要があります。
  • リクエストの処理...
  • リクエストの終了 スレッド ローカルをクリアします。
于 2011-08-01T09:03:44.580 に答える