Javaでlog4jを使ってログを出力させてます。
Javaでlog4jを使ってログを出力させてます。
複数のログを出力したいので、同一propertiesに複数のAppenderを定義しています。
内容は以下の通りです。
log4j.logger.processA=DEBUG, A
log4j.appender.A=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File=a.log
log4j.appender.A.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.A.Append=true
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n
log4j.logger.processB=DEBUG, B
log4j.appender.B=org.apache.log4j.DailyRollingFileAppender
log4j.appender.B.File=b.log
log4j.appender.B.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.B.Append=true
log4j.appender.B.layout=org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n
log4j.logger.processC=DEBUG, C
log4j.appender.C=org.apache.log4j.DailyRollingFileAppender
log4j.appender.C.File=c.log
log4j.appender.C.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.C.Append=true
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n
processAやらprocessB、processCは同一サーバ内で非同期で動くプロセスです。
つまり、動作するプロセス毎にログ出力先を変えてます。
各プロセスを動かすと、ちゃんと想定したログファイルに出力されるんですが、
ローテートの時に「log4j:ERROR Failed to rename ~」のエラーが出て、
正常にローテートしません。
なぜだろうと思って、一度全てのログファイルを削除して、
processAだけ動かしてみました。
すると、a.logだけが出力されると思いきや、
b.logとc.logまで0kbではありますが出力されたんです。
つまり、データこそ出力しないけど、
他プロセスで出力するファイルをロックしてたんです。
これって、同一propertiesに書いているのが悪いんでしょうか?
それとも、設定が不足している為、そうなってしまってるんでしょうか?
ご存知の方、お知恵をお貸し下さい。
お礼
毎度ありがとうございます。 そうですよね。 複数のプロセスから同じファイルをオープンできるわけないんですよね。 素直に別ファイルに書き込むことにします。 だいたい、複数の環境(同じWebアプリを複数、本番とか自分たち用とかお客さんテスト用)を、同じサーバに配置しようというのが間違ってる・・・。なんのためのVMWareなんだか。→そうすれば、アプリ的にはログ設定もDB設定もまったく同じにできて便利なのに・・・というか、そのための仮想化だろうに・・・。 と愚痴になっていまいました。