- PR -

log4jでのユーザ単位での切り分けについて

1
投稿者投稿内容
Masayuki2501
常連さん
会議室デビュー日: 2006/01/02
投稿数: 25
投稿日時: 2006-07-03 20:40
こんばんは。

現在、アプリ側でのログ出力にlog4jを用いています。
特に問題はないのですが、webからの同時に複数のアクセスがあった場合、
ログが混在してしまいます。

時刻なども表示されているので、注意深く追っていけば、わかるのですが、
ユーザ(同一セッション)ごとにログを出力しようかと考えています。

ただ、WEB側は、JSESSION_IDを出力してやればよいと思うのですが、
単体のクラス(HTTP_SEVLERTを継承していないクラス)では、どうしても、JSESSION_IDを
表示させることができません。

ユーザ単位でユニークになるようなうまいログの出力の仕方などはございますでしょうか?


かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-07-03 21:26
1リクエストに注目するなら、スレッド名はいかがでしょうか。
リクエストの中からスレッドを生成していない限り、
通常は1リクエスト1スレッドとなります。

リクエストのスレッド名だけではスレッドの特定が出来ない場合、
(全スレッドの名前が全て同じ等・・・)
コード:
System#identityHashCode(Thread.currentThread());


で、その現在のスレッドのオーバーライドされていないハッシュ値が取得できますが、
そのハッシュ値ならほぼ一意にスレッドを示せますので、
ログに出力すればリクエストを特定することが出来ると思います。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-07-03 21:32
引用:

Masayuki2501さんの書き込み (2006-07-03 20:40) より:
現在、アプリ側でのログ出力にlog4jを用いています。
特に問題はないのですが、webからの同時に複数のアクセスがあった場合、
ログが混在してしまいます。

snip...

ユーザ単位でユニークになるようなうまいログの出力の仕方などはございますでしょうか?


まさにそのためにNDCというのがあるはずです。
Masayuki2501
常連さん
会議室デビュー日: 2006/01/02
投稿数: 25
投稿日時: 2006-07-04 22:17
ご回答ありがとうございます。

かつのり様
>System#identityHashCode(Thread.currentThread());

現在、リクエストの中からスレッドは起こしていませんので、
上記手法はとても参考になりました。
ありがとうございした。


なちゃ様
>まさにそのためにNDCというのがあるはずです。

NDCというのを知りませんでした。
log4j固有の機能のようなので、調査して使用してみたいと思います。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)