- - PR -
log4jでIPアドレスごとにログファイルを出力したい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-12-18 10:57
Servletにおいてlog4jをもちいてロギングしています。アプリケーション開発者用に、接続してきたIPアドレスごとにログファイルをわけて出力したいのですが、可能でしょうか。FileRollingAppenderの機能に追加して、ファイル名にIPアドレスがくっつくようになるとよい。
| ||||
|
投稿日時: 2003-12-18 11:27
とてもシンプルに書けば
Logger logger = Logger.getLogger(request.getRemoteAddr()); でしょうか。 | ||||
|
投稿日時: 2003-12-18 12:11
これだと、ロガーのカテゴリは指定できますが、ログの出力先(アペンダ)に関する 設定にはならないですよねえ?? ログファイルにIPを含めるということは、アペンダの設定を動的にプログラム内から 変えるという事になりますよね。私はやったことないですねえ。。。 そもそも、ログファイルの数が無限に(理論上はIPアドレスの数=約40億個)だけ 増える可能性がありますので、あまり良い設計とは言えませんが、、、 | ||||
|
投稿日時: 2003-12-18 12:21
>これだと、ロガーのカテゴリは指定できますが、ログの出力先(アペンダ)に関する
>設定にはならないですよねえ?? あ、説明不足でしたね。申し訳ない。 開発者毎に、とのことだったので開発者の IP アドレス毎に Appender をあらかじめ設定しておく前提でした。 接続する IP アドレスが無数にあるのならもっとスマートな方法があるとおもいますが。 | ||||
|
投稿日時: 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アドレスを使用する方法も検討に入れてください。 | ||||
|
投稿日時: 2003-12-19 15:56
自己レスです。新規にIPアドレスごとにログファイルを生成するAppenderを作成しました。
ソースをみると、既存のFileAppenderだとファイルは1個(ソースではWriterを1個)しか持っていないので、単なる設定では無理です。IPアドレスごとのカテゴリ分けはやり方がわかりませんでした。Servletの最初にMDCにIPアドレスをputし、新規AppenderのappendでMDCから取り出して、ファイル(Writer)の振り分けを行います。 | ||||
1
