- PR -

log4jのSocketAppenderについて

1
投稿者投稿内容
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 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 ]
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-05-26 13:59
log4jserverは一つでよいはずです。
で、設定ですが。

Webアプリ側: Appenderは一つだけでよい。とにかく全てのログをSocketAppenderに流し込むだけ。

ログサーバ側: こちらに「望み通りの」設定を書く。複数ファイルに書きたいならその分だけFileAppenderの類を定義すればよい。

ってだけじゃないですかね。

私の環境でも似たようなことをしていて、ただしWebアプリケーションサーバ側が複数VM構成なので、複数の接続を受け作ることができるソケットサーバを自作して使っています。
アプリサーバが1VMならSimpleSocketServer一つでいけると思いますよ。
ただ、あれはあくまでサンプルみたいなものだと思うので本番で使うのはちょっと。。。という気はします。
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-05-26 14:19
佐々木さん、ご返信ありがとう御座います。
引用:

ログサーバ側: こちらに「望み通りの」設定を書く。複数ファイルに書きたいならその分だけFileAppenderの類を定義すればよい。


これだと、複数のファイルに同じ内容のログが書き込まれるということですか?
私が実現したいのは、categoryを使って、あるクラスのログはcategory1を、また別のクラスはcategory2を使うようにし、
category1->appender1(SocketAppender)->log4jserver->sample1.logというファイル名で保存
category2->appender2(SocketAppender)->log4jserver->sample2.logというファイル名で保存
という実装です。
SocketAppenderでは、接続先のlog4jserverの設定ファイルにあるappenderのどれを使うのか指定できないようでしたので、ポートを2つ利用する方法しかないでしょうかと質問させていただきました。
引用:

ただ、あれはあくまでサンプルみたいなものだと思うので本番で使うのはちょっと。。。という気はします。


本番で使うつもりで、調査、実験をしていました。log4jを分散環境で使う場合、みなさん、ご自分でログサーバを実装されているんでしょうか?それとも、log4jserverを利用する以外に何か良い方法があるのでしょうか?
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-05-26 14:53
引用:

これだと、複数のファイルに同じ内容のログが書き込まれるということですか?


いえいえ。それじゃぁ不便ですよね。。

Webアプリ側では複数のカテゴリのログを全て単一のSocketAppenderに流し込んじゃって良いんです。

その結果、シリアライズされたLoggingEventのインスタンスがログサーバ側で受信・復元され、「まるでログサーバ側でロギングされたように」ログサーバ側の設定(SimpleSocketServerの第2引数で指定する設定ファイルの内容)に従って処理されるわけです。カテゴリによってそれぞれのファイルに振り分ける処理はログサーバ側だけで書けば良いんです。

実際試してみるとすぐわかると思いますよ。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-05-26 15:12
引用:

taipingさんの書き込み (2004-05-26 14:19) より:
本番で使うつもりで、調査、実験をしていました。log4jを分散環境で使う場合、みなさん、ご自分でログサーバを実装されているんでしょうか?それとも、log4jserverを利用する以外に何か良い方法があるのでしょうか?



ログサーバで syslog デーモンが起動しているなら SyslogAppender という手は ?
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-05-26 16:07
佐々木さん、はしもとさん、ご返信ありがとう御座います。

引用:

佐々木さんの書き込み (2004-05-26 14:53)より:
Webアプリ側では複数のカテゴリのログを全て単一のSocketAppenderに流し込んじゃって良いんです。
その結果、シリアライズされたLoggingEventのインスタンスがログサーバ側で受信・復元され、「まるでログサーバ側でロギングされたように」ログサーバ側の設定(SimpleSocketServerの第2引数で指定する設定ファイルの内容)に従って処理されるわけです。カテゴリによってそれぞれのファイルに振り分ける処理はログサーバ側だけで書けば良いんです。


なるほど!そのようにするんですね。たいへん勉強になりました。
引用:

はしもとさんの書き込み (2004-05-26 15:12) より:
ログサーバで syslog デーモンが起動しているなら SyslogAppender という手は ?


そうですね。佐々木さんの書かれた内容(SimpleSocketServerへの評価)と合わせて考えても、syslogデーモンならサーバ側は信頼できると考えられます。
また、syslogの設定で、facilityのlocal0〜local7を使用すれば、ログの種類ごとにファイル名を分けて保存することも可能になりそうです。

お二人ともありがとう御座いました。
1

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