我正在創建一個管理工具,可根據需要啓動不同的任務。我遇到以下奇怪的現象:我無法通過ProcessBuilder
或Runtime.exec
和log4j(1.2.17)登錄控制檯來啓動應用程序。沒有記錄到控制檯它工作得很好。記錄到文件,例如它也工作得很好。手動啓動jar從命令行啓動並記錄到控制檯也可以正常工作。ProcessBuilder:無法根據log4j啓動程序
由於顯而易見的原因,我很喜歡它,如果我不需要手動添加一行來刪除控制檯appender,那麼每次使用管理工具測試jar時都是如此。
我Log4j追加:
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
</layout>
</appender>
我的代碼以啓動罐子: ArrayList的命令=新的ArrayList(); commands.add(「java」); commands.add(「 - jar」); commands.add(file.getAbsolutePath());
for (CommandLineArgument arg : args) {
commands.add("-" + arg.getKey() + "=" + arg.getDefaultArgument());
}
ProcessBuilder processBuilder = new ProcessBuilder(commands);
DateFormat dateFormat = new SimpleDateFormat("-dd-MM-yyyy-HH-mm-ss");
String logFileName = baseLogDir + processId + dateFormat.format(new Date()) + ".log";
File stdOutFile = new File(logFileName + ".stdout");
if(!stdOutFile.exists())
stdOutFile.createNewFile();
processBuilder.redirectInput(stdOutFile);
log.debug("redirecting stdout to " + stdOutFile.getAbsolutePath());
File stdErrFile = new File(logFileName + ".stderr");
if(!stdErrFile.exists())
stdErrFile.createNewFile();
processBuilder.redirectError(stdErrFile);
log.debug("redirecting stderr to " + stdErrFile.getAbsolutePath());
log.info("starting module with the following command: " + processBuilder.command());
return processBuilder.start();