- - PR -
Log4jを使用した複数プロセスでのログ出力
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-13 22:24
こんにちは。
Log4jのAppenderについてお聞きしたいことがあります。 Log4jを利用して、複数のプロセスから1つのログファイルに書き込みを行う場合、SocketAppenderを使用するよう見受けられます。 しかし、その場合、ログファイルの数だけSocketServerが必要となり、JavaVMがアプリケーション数+ログファイル数分動作することになります。 (2プロセスで1ログファイルの関係が10セット程度あるため30JavaVM!) 今回リソース的に上記環境が厳しいため、別の回避手段があれば教えて頂きたく投稿 しました。 なお、動作環境はWindows,iSeriesで、Log4j 1.2.8です。 初歩的な質問ですいませんが、宜しくお願いいたします。 | ||||
|
投稿日時: 2004-12-14 09:50
Log4JにおまけでついてくるSimpleSocketServerを使うならば、そうかもしれません。しかしあれは本当に単純なサンプルプログラムみたいなものなので、業務に使うのはどうかと思います。 自分で複数接続対応のソケットサーバを作ってしまえば、複数プロセスからのログ出力を一手に引き受けることができますよ。 私が依然いたプロジェクトではそうしていました。 | ||||
|
投稿日時: 2004-12-14 11:26
こんにちは。
Syslogサーバが動かせるのであれば、SyslogAppenderを使うというのはいかがでしょうか? | ||||
|
投稿日時: 2004-12-14 11:36
佐々木さん
taipingさん ありがとうございます。 今回はWindows機1台の中で閉じて対処したいため、SyslogAppenderは使えないかなぁと思っています。 また、自力でソケットサーバを作成する場合、ログと出力先ログファイルの関係を切り分ける処理が結構厄介な気がしてしまうのですが。。。 やはりLog4jの設定レベルでの対応は難しいということなのでしょうか? | ||||
|
投稿日時: 2004-12-14 12:22
そんなに厄介じゃないですよ。 クライアント側では、サーバに送りたいログを単にSocketAppenderに流し込む簡単な設定を施しておきます。 ソケットサーバは、クライアントが送ってくるデータを読んでLoggingEventのインスタンスを得ます(シリアライズされて飛んでくるんです)。 あとは、それをCategory#callAppenders(LoggingEvent event)に渡してやればOK。このときのCategoryインスタンスは、LogManager#getRootLogger()で取得できるてっぺんのロガーでよいでしょう。 こうすると、あとはサーバ側のLog4Jの設定にしたがって、そのログが「まるでサーバでロギングされたかのように」処理されます。 まぁためしにちょっと書いてみてください。簡単ですから。 | ||||
|
投稿日時: 2004-12-14 16:18
佐々木さん
ありがとうございます。 ちょっと試してみます。 いろいろとご教授ありがとうございました>ALL |
1