簡単にログにユーザIDを出す方法
「ログにユーザID出してよ」という要望に比較的簡単に答える方法について説明。 久々の技術ネタ。 ■前提条件 ・J2EE1.3以上(Filterが使える事) Tomcat4.2以上なら対応していたハズ。 ・Log4jとかLoggerを元々使っている事。 ■説明 【製造物】 ・ThreadMappingSingletonClass ・ThreadRegistFilterClass ・自前LoggerClass ・web.xml(編集するのさ) 【クラス概要】 ■ThreadMappingSingletonClass ・概要 スレッドIDとユーザIDを保持するシングルトンクラス ・フィールド ・Map:スレッドIDとユーザIDを保持するマップ ・機能 ・登録 スレッドIDとユーザIDを引数とし、Mapに登録する。 ・削除 スレッドIDを引数とし、Mapから削除する。 ■ThreadRegistFilterClass ・概要 RequestをFilterし、ThreadMappingSingletonClassに登録、削除をする。 Filterをimplimentsする事。 ・機能 SessionなりRemoteUserなりでユーザIDを取得し、ThreadMappingSingletonClassに登録する。 因みに、Finallyで削除するのが良いと思う。 ■自前LoggerClass ・概要 ThreadMappingSingletonClassからスレッドIDをキーにしてユーザIDを取得する。 ログ出力メッセージの先頭にユーザIDを出力する。 LoggerをExtendsなりimplimentsする事。 ・機能 それぞれのメソッドをオーバーライドなり何なりして、適切にメッセージが出力出来るようにして下さい。 本当はシーケンス図があれば分かりやすいんだろうけど、めんどいので割愛。 分かって。