- - PR -
log4jのSocketAppenderについて
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-26 11:01
早速ですが質問させていただきます。
Tomcatが動いているサーバのWEBアプリケーションのログを、ログサーバ上のファイルに保存しようとしています。 ログサーバ上でlog4jサーバ(SimpleSocketServer)を起動し、WEBアプリケーション側ではSocketAppenderを用いて、ログの記述要求を転送しています。 そこでWEBアプリケーション側でappenderを2つ用意し、それぞれのログサーバ上での保存ファイル名を異なるものにしたいと考えいます。 この場合、log4jサーバを2つ起動し、それぞれに違うポート番号を与えて、ポート番号と保存ファイル名が1対1で結びつくようにしなければならないのでしょうか? log4jサーバを1つだけ起動して、複数ファイルに保存する方法は無いのでしょうか? 設定ファイルの抜粋を添付します。 --------------------------------------- WEBアプリケーション側 sample1.logというファイル名で保存するappender <appender name="REMOTELOG1" class="org.apache.log4j.net.SocketAppender"> <param name="RemoteHost" value="XXXX" /> <param name="Port" value="port1" /> </appender> sample2.logというファイル名で保存するappender <appender name="REMOTELOG2" class="org.apache.log4j.net.SocketAppender"> <param name="RemoteHost" value="XXXX" /> <param name="Port" value="port1" /> </appender> --------------------------------------- ログサーバ側 # sampleLogger log4j.rootLogger = DEBUG,A4 # APPENDER A4 log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender log4j.appender.A4.File = sample1.log log4j.appender.A4.DatePattern='.'yyyy-MM-dd log4j.appender.A4.layout=org.apache.log4j.PatternLayout log4j.appender.A4.layout.ConversionPattern=[%t] %m%n ---------------------------------------------------- 以上、長文で読みづらいものとなりましたが、よろしくお願い致します。 [ メッセージ編集済み 編集者: taiping 編集日時 2004-05-26 11:02 ] | ||||||||
|
投稿日時: 2004-05-26 13:59
log4jserverは一つでよいはずです。
で、設定ですが。 Webアプリ側: Appenderは一つだけでよい。とにかく全てのログをSocketAppenderに流し込むだけ。 ログサーバ側: こちらに「望み通りの」設定を書く。複数ファイルに書きたいならその分だけFileAppenderの類を定義すればよい。 ってだけじゃないですかね。 私の環境でも似たようなことをしていて、ただしWebアプリケーションサーバ側が複数VM構成なので、複数の接続を受け作ることができるソケットサーバを自作して使っています。 アプリサーバが1VMならSimpleSocketServer一つでいけると思いますよ。 ただ、あれはあくまでサンプルみたいなものだと思うので本番で使うのはちょっと。。。という気はします。 | ||||||||
|
投稿日時: 2004-05-26 14:19
佐々木さん、ご返信ありがとう御座います。
これだと、複数のファイルに同じ内容のログが書き込まれるということですか? 私が実現したいのは、categoryを使って、あるクラスのログはcategory1を、また別のクラスはcategory2を使うようにし、 category1->appender1(SocketAppender)->log4jserver->sample1.logというファイル名で保存 category2->appender2(SocketAppender)->log4jserver->sample2.logというファイル名で保存 という実装です。 SocketAppenderでは、接続先のlog4jserverの設定ファイルにあるappenderのどれを使うのか指定できないようでしたので、ポートを2つ利用する方法しかないでしょうかと質問させていただきました。
本番で使うつもりで、調査、実験をしていました。log4jを分散環境で使う場合、みなさん、ご自分でログサーバを実装されているんでしょうか?それとも、log4jserverを利用する以外に何か良い方法があるのでしょうか? | ||||||||
|
投稿日時: 2004-05-26 14:53
いえいえ。それじゃぁ不便ですよね。。 Webアプリ側では複数のカテゴリのログを全て単一のSocketAppenderに流し込んじゃって良いんです。 その結果、シリアライズされたLoggingEventのインスタンスがログサーバ側で受信・復元され、「まるでログサーバ側でロギングされたように」ログサーバ側の設定(SimpleSocketServerの第2引数で指定する設定ファイルの内容)に従って処理されるわけです。カテゴリによってそれぞれのファイルに振り分ける処理はログサーバ側だけで書けば良いんです。 実際試してみるとすぐわかると思いますよ。 | ||||||||
|
投稿日時: 2004-05-26 15:12
ログサーバで syslog デーモンが起動しているなら SyslogAppender という手は ? | ||||||||
|
投稿日時: 2004-05-26 16:07
佐々木さん、はしもとさん、ご返信ありがとう御座います。
なるほど!そのようにするんですね。たいへん勉強になりました。
そうですね。佐々木さんの書かれた内容(SimpleSocketServerへの評価)と合わせて考えても、syslogデーモンならサーバ側は信頼できると考えられます。 また、syslogの設定で、facilityのlocal0〜local7を使用すれば、ログの種類ごとにファイル名を分けて保存することも可能になりそうです。 お二人ともありがとう御座いました。 | ||||||||
1
