Log4Jを使って複数プロセスのJVMから1つのログファイルに書き込みを行なうには

Log4J全般を詳しく解説をしてくれているサイトを見つけた。その中でも1番おおっ!と思ったのがここ。

SocketAppender は、その名の通り Socket を開いてログを送信する Appender である。だから、リモートログサーバを作ってそこにログを送ってファイル保存するようにすれば、かなりセキュリティを高めることができる。
リモートログサーバでなくても、複数の JVM が独立して動いている状況で、単一のログファイルに記録したいケースでは、厳格に言うとこれを使った方がいい。実際には別々の JVM で動く log4j で FileAppender で同一のファイルに書き込むとすると、問題が生じたり、あるいはOS依存でうまくいかない可能性がある。要するにファイルの書き込みロックは前提にできないからね。ソケットの場合は同時に同じソケットに書き込んでも論理上問題は生じない....だから、こっちを使うべきなんである。

アプリケーションサーバーのクラスタリングを行なった場合、普通にLog4JのDailyRollingFileAppenderなんかを使うとプロセスの数だけログファイルが出来てしまう。例えばマシンが4台なんてあった場合、正常ログとエラーログの2つしかログを出力していなかったとしても、それぞれ4つづつの合計8ファイルからログを探す時があったりして、とても面倒だった。
しかも1つのマシンで複数のプロセスを実行させる垂直クラスタリングを行った場合は同じログファイルを書くように設定されてしまう為、プロセス同士でファイルロックの取り合いが発生する。それを回避する為には、以前(id:syunduel:20040929)に書いたようにLog4Jのクラスを継承したりしていろいろややこしいことをする必要があった。
しかし、そんな問題はSocketAppenderを使えば一撃解決。今まで解説している所が見つけられなかったから不安を感じて使用できなかったけど、これからは使っていこうかな。もちろんクラスタリングされてる時or複数アプリケーションのログを同一ファイルに書き込みたい時だけね。

これを使えば、社内で動いてるアプリケーションの深刻なエラーだけを、社内統一エラーログファイルに書くことが出来るようになるのか。しかも現在稼動中のLog4Jの設定ファイルを書き換えるだけで。これはかなりでかい。