我有一个Java应用程序,它使用Runtime.exec启动Perl程序,等待它返回然后继续。我希望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
(我将Append设置为false,因为如果重新启动Java应用程序,我想在同一天覆盖任何以前的日志文件。)
在Perl程序中,我有:
Log::Log4perl->easy_init({level => $DEBUG,
file => ">>/path/app.log"});
这导致log4j输出,后跟log4perl输出,转到同一个文件,但是当Perl程序完成时,Java应用程序似乎无法写入该文件。
我可以以某种方式重置Java端的文件句柄吗? 我可以以某种方式将记录器传递给Perl程序而不是文件名吗?
我想过将两者的输出发送到控制台,然后将其保存到文件中,但这对我来说是一种功能损失,因为我正在利用向控制台和文件发送不同级别的输出。