- PR -

log4jについて

1
投稿者投稿内容
コウ
会議室デビュー日: 2006/07/24
投稿数: 2
投稿日時: 2006-10-18 20:42
log4jを使用してOracleへログを出力しようとしています。

ログの出力内容として、以下を考えており、
テーブル構成についても同様としたいと思っています。
@日付
Aレベル(DEBUG,INFO等)
BセッションID
Cログインユーザ名
Dエラーメッセージ

メッセージに不可する情報(BC)を分けて登録する方法はないのでしょうか?
ご教授お願いします。

【log4j設定ファイル】
log4j.appender.jdbc.layout.ConversionPattern=
INSERT INTO T_LOG(日付,レベル,セッションID,ログインユーザ名,エラーメッセージ)
VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%-5p', '%m', '%m' ,'%m')

※「%m」を分割するイメージです。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-10-18 21:33
Oracle10gだったら、正規表現で文字列分割したりできるらしいので、
分割したい文字列同士の繋げ方を工夫して、REGEXP_SUBSTR関数で
分割して登録なんてできるかもしれないです。
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2006-10-18 21:43
org.apache.log4j.MDCを使うとよいかもしれません。

アクセスがあれば
MDC.put("sessionid",sessionId);
MDC.put("userid", userId);
アクセスがおわったときに
MDC.remove("sessionid");
MDC.remove("userid");

log4.xmlは、
%X{sessionid}
%X{userid}
のようなかんじでしょうか。
くわしくは、log4jのMDCのAPIなどを参照されてください。
コウ
会議室デビュー日: 2006/07/24
投稿数: 2
投稿日時: 2006-10-19 09:31
ご回答ありがとうございます。

org.apache.log4j.MDCをしようすると実装できそうです。
少し気になる点は、値保持用のmapがstaticになっていたので
同時に複数アクセスが来た場合に正しい値が保証できないのかなと
思っています。
1

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