Runtime.exec を使用して Perl プログラムを起動し、それが戻るのを待ってから続行する Java アプリケーションがあります。Java アプリケーションからの log4j 出力と Perl プログラムからの log4perl 出力を同じファイルに出力したいと考えています。
私の log4j.properties ファイルには、次のものがあります。
log4j.appender.app=org.apache.log4j.DailyRollingFileAppender
log4j.appender.app.File=/path/app.log
log4j.appender.app.DatePattern=.yyyy-MM-dd
log4j.appender.app.Append=false
log4j.appender.app.layout=org.apache.log4j.PatternLayout
log4.appender.app.layout.ConversionPattern=%5p [%t] (%F:%L) %m%n
(Java アプリケーションが再起動された場合に、同じ日の以前のログ ファイルを上書きしたいので、Append を false に設定しました。)
Perl プログラムには、次のものがあります。
Log::Log4perl->easy_init({level => $DEBUG,
file => ">>/path/app.log"});
これにより、log4j 出力、続いて log4perl 出力が同じファイルに出力されますが、Perl プログラムが終了すると、Java アプリケーションはファイルに書き込めないように見えます。
どうにかして Java 側のファイル ハンドルをリセットできますか? ファイル名の代わりにロガーを Perl プログラムに渡すことはできますか?
両方からの出力をコンソールに送信してからファイルに保存することを考えましたが、コンソールとファイルにさまざまなレベルの出力を送信することを利用しているため、機能が失われます。