- PR -

log4jでIPアドレスごとにログファイルを出力したい

1
投稿者投稿内容
MIU
会議室デビュー日: 2003/12/18
投稿数: 5
投稿日時: 2003-12-18 10:57
Servletにおいてlog4jをもちいてロギングしています。アプリケーション開発者用に、接続してきたIPアドレスごとにログファイルをわけて出力したいのですが、可能でしょうか。FileRollingAppenderの機能に追加して、ファイル名にIPアドレスがくっつくようになるとよい。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-12-18 11:27
とてもシンプルに書けば
Logger logger = Logger.getLogger(request.getRemoteAddr());
でしょうか。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-18 12:11
引用:

Logger logger = Logger.getLogger(request.getRemoteAddr());


これだと、ロガーのカテゴリは指定できますが、ログの出力先(アペンダ)に関する
設定にはならないですよねえ??
ログファイルにIPを含めるということは、アペンダの設定を動的にプログラム内から
変えるという事になりますよね。私はやったことないですねえ。。。
そもそも、ログファイルの数が無限に(理論上はIPアドレスの数=約40億個)だけ
増える可能性がありますので、あまり良い設計とは言えませんが、、、
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-12-18 12:21
>これだと、ロガーのカテゴリは指定できますが、ログの出力先(アペンダ)に関する
>設定にはならないですよねえ??
あ、説明不足でしたね。申し訳ない。
開発者毎に、とのことだったので開発者の IP アドレス毎に Appender をあらかじめ設定しておく前提でした。
接続する IP アドレスが無数にあるのならもっとスマートな方法があるとおもいますが。
MIU
会議室デビュー日: 2003/12/18
投稿数: 5
投稿日時: 2003-12-18 12:24
現在のログの出力設定ですが、各クラスの最初に
private static Logger log = Logger.getLogger(クラス名.class);
と記述し、log変数を使用してそのクラス内で出力しています。
Servletはコントローラとして1つのみ存在する格好をしています。
コントローラサーブレットについては
private Logger log = null;
と宣言し、init()で
log = Logger.getLogger(クラス名.class);
をおこなっています。
このようなコードはなるべく変えずにうまくいく方法はないでしょうか。
あくまで開発時用としてカテゴリにIPアドレスを使用する方法も検討に入れてください。

MIU
会議室デビュー日: 2003/12/18
投稿数: 5
投稿日時: 2003-12-19 15:56
自己レスです。新規にIPアドレスごとにログファイルを生成するAppenderを作成しました。
ソースをみると、既存のFileAppenderだとファイルは1個(ソースではWriterを1個)しか持っていないので、単なる設定では無理です。IPアドレスごとのカテゴリ分けはやり方がわかりませんでした。Servletの最初にMDCにIPアドレスをputし、新規AppenderのappendでMDCから取り出して、ファイル(Writer)の振り分けを行います。
1

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