使用 Java 代码启动 filebeat?
Start filebeat using a Java code?
我正在使用 filebeat 读取一些日志文件,我需要使用 Java 程序启动 filebeat。 filebeat 命令是使用 Windows PowerShell 执行的。我使用了下面的代码,但是没有用。
try {
ProcessBuilder b1 = new ProcessBuilder("powershell.exe", "/c", "cd \"C:\Program Files\Filebeat\" && ./filebeat -e -c filebeat.yml -d \"publish\"\");
b1.redirectErrorStream(true);
Process p1 = b1.start();
BufferedReader r1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line1;
while (true) {
line1 = r1.readLine();
if (line1 == null) { break; }
System.out.println(line1);
}
} catch(Exception e) {
}
你搞糊涂了PowerShell with CMD。后者有一个参数/c
,前者没有。此外,不要在命令行中使用 cd
,您应该简单地在 ProcessBuilder
对象上设置工作目录,并且命令行的每个标记都应该是一个单独的数组元素。
将您的代码更改为类似这样的代码,它应该可以达到您的预期:
ProcessBuilder b1 = new ProcessBuilder("cmd.exe", "/c", "filebeat", "-e", "-c", "filebeat.yml", "-d", "\"publish\"");
b1.directory(new File("C:\Program Files\Filebeat"));
b1.redirectErrorStream(true);
Process p1 = b1.start();
下面的代码有效。
ProcessBuilder pb = new ProcessBuilder("C:\Program Files\Filebeat\filebeat.exe", "-c", "C:\Program Files\Filebeat\filebeat.yml", "-e");
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
我正在使用 filebeat 读取一些日志文件,我需要使用 Java 程序启动 filebeat。 filebeat 命令是使用 Windows PowerShell 执行的。我使用了下面的代码,但是没有用。
try {
ProcessBuilder b1 = new ProcessBuilder("powershell.exe", "/c", "cd \"C:\Program Files\Filebeat\" && ./filebeat -e -c filebeat.yml -d \"publish\"\");
b1.redirectErrorStream(true);
Process p1 = b1.start();
BufferedReader r1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line1;
while (true) {
line1 = r1.readLine();
if (line1 == null) { break; }
System.out.println(line1);
}
} catch(Exception e) {
}
你搞糊涂了PowerShell with CMD。后者有一个参数/c
,前者没有。此外,不要在命令行中使用 cd
,您应该简单地在 ProcessBuilder
对象上设置工作目录,并且命令行的每个标记都应该是一个单独的数组元素。
将您的代码更改为类似这样的代码,它应该可以达到您的预期:
ProcessBuilder b1 = new ProcessBuilder("cmd.exe", "/c", "filebeat", "-e", "-c", "filebeat.yml", "-d", "\"publish\"");
b1.directory(new File("C:\Program Files\Filebeat"));
b1.redirectErrorStream(true);
Process p1 = b1.start();
下面的代码有效。
ProcessBuilder pb = new ProcessBuilder("C:\Program Files\Filebeat\filebeat.exe", "-c", "C:\Program Files\Filebeat\filebeat.yml", "-e");
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
p.waitFor();