提交 0573b0cc 编写于 作者: S Serge Rider

#1669 Log process error output

上级 977bbe00
......@@ -17,6 +17,8 @@
package org.jkiss.dbeaver.registry;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.equinox.security.storage.ISecurePreferences;
import org.jkiss.code.NotNull;
......@@ -782,14 +784,35 @@ public class DataSourceDescriptor
variables.put(RegistryConstants.VARIABLE_URL, info.getUrl());
final DBRProcessDescriptor processDescriptor = new DBRProcessDescriptor(command, variables);
//processDescriptor.getProcessBuilder().redirectErrorStream(true);
monitor.subTask("Execute process " + processDescriptor.getName());
DBUserInterface.getInstance().executeProcess(processDescriptor);
{
// Run output grab job
new AbstractJob(processDescriptor.getName() + ": output reader") {
@Override
protected IStatus run(DBRProgressMonitor monitor) {
try {
String output = processDescriptor.dumpErrors();
log.debug("Process error output:\n" + output);
} catch (Exception e) {
log.debug(e);
}
return Status.OK_STATUS;
}
}.schedule();
}
if (command.isWaitProcessFinish()) {
int resultCode;
if (command.getWaitProcessTimeoutMs() >= 0) {
processDescriptor.waitFor(command.getWaitProcessTimeoutMs());
resultCode = processDescriptor.waitFor(command.getWaitProcessTimeoutMs());
} else {
processDescriptor.waitFor();
resultCode = processDescriptor.waitFor();
}
log.debug(processDescriptor.getName() + " result code: " + resultCode);
}
addChildProcess(processDescriptor);
}
......
......@@ -17,8 +17,7 @@
package org.jkiss.dbeaver.model.runtime;
import java.io.File;
import java.io.IOException;
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -26,6 +25,7 @@ import java.util.concurrent.TimeUnit;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.IOUtils;
/**
* DBRProcessDescriptor
......@@ -35,8 +35,8 @@ public class DBRProcessDescriptor
private final DBRShellCommand command;
private ProcessBuilder processBuilder;
private Process process;
private int exitValue = -1;
private volatile Process process;
private volatile int exitValue = -1;
private DBRProcessListener processListener;
public DBRProcessDescriptor(DBRShellCommand command)
......@@ -171,4 +171,22 @@ public class DBRProcessDescriptor
}
return exitValue;
}
public String dumpErrors() {
if (process == null) {
return null;
}
StringWriter buf = new StringWriter();
try {
InputStream inputStream = process.getErrorStream();
if (inputStream != null) {
// Note: do not close reader because it will close process error stream
Reader input = new InputStreamReader(inputStream, GeneralUtils.getDefaultConsoleEncoding());
IOUtils.copyText(input, buf);
}
} catch (IOException e) {
e.printStackTrace(new PrintWriter(buf, true));
}
return buf.toString();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册