Объединение журналов log4j и log4perl
У меня есть Java-приложение, которое запускает Perl-программу, используя Runtime.exec, ждет ее возврата и затем продолжает. Я хотел бы, чтобы выходные данные log4j из приложения Java и выходные данные log4perl из программы Perl переходили в один и тот же файл.
В моем файле 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
(Я установил Append на false, потому что, если приложение Java перезапущено, я хочу перезаписать любой предыдущий файл журнала того же дня.)
В программе Perl у меня есть:
Log::Log4perl->easy_init({level => $DEBUG,
file => ">>/path/app.log"});
Это приводит к выводу log4j, за которым следует вывод log4perl, идущий в тот же файл, но когда программа Perl завершает работу, приложение Java больше не может записывать в файл.
Можно ли как-то сбросить дескриптор файла на стороне Java? Можно ли как-то передать регистратор в программу Perl вместо имени файла?
Я думал об отправке вывода с обоих на консоль и затем сохранении этого в файл, но это было бы потерей для меня функциональности, так как я использую преимущество отправки разных уровней вывода на консоль и файл.