以下命令在我的终端中运行良好:
gcloud
日志读取"logName=projects/logs/java.log AND labels.component=projet1 AND textPayload="End: of query."
但通过Runtime.getRuntime().exec
执行时返回空inputstream
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(new String[]{"gcloud", "logging" ,"read" ,"logName=projects/logs/java.log AND labels.component=project1 AND textPayload="End: of query.""});
BufferedReader is = new BufferedReader(new
InputStreamReader(process.getInputStream()));
更新:我尝试过使用processBuilder,我的命令参数看起来像:
命令为:[gcloud,logging,read,'logName=projects/logs/java.log AND labels.component=project1 AND textPayload="End:of query."AND timestamp>"2018-11-15T15:12:11Z"']
但我在执行时遇到以下错误:
错误:(gcloud.logging.read(INVALID_ARGUMENT:无法解析的筛选器:第1行第147列,标记"2018-11-15T15:12:11Z"处出现语法错误
您需要一个双转义,在Java中,当我们调用另一个需要转义的东西(regex或其他什么(时,这很常见
试试这个(我只是用\\替换了\"(
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(new String[]{"gcloud", "logging" ,"read"
,"logName=projects/logs/java.log AND labels.component=project1 AND textPayload=\"End: of query.\""});
BufferedReader is = new BufferedReader(new
InputStreamReader(process.getInputStream()));
\:逃到\
\":逃到">
- 所以\\"将在runtime.exec中转义为\">