当我配置谷歌云数据流eclipse插件时,我无法看到日志,该插件将workerLogLevelOverrides设置为{\"com.mycompany.testdataflow.StarterPipeline\":\"TRACE\"}
奇怪的是,ERROR级别的配置似乎显示了日志,但任何更低的级别都没有。
有人见过这个吗?
这是我用来尝试输出日志的代码段
private static final Logger LOG=LoggerFactory.getLogger(StarterPipeline.class);
public static void main(String[] args) {
Pipeline p = Pipeline.create(PipelineOptionsFactory.fromArgs(args).withValidation().create());
for (String string : args) {
// System.out.println("########## "+string);
LOG.trace("Doing the trace for pipeline ##### Parameter is #### " + string);
LOG.trace("Doing the trace for pipeline ##### Parameter is #### ");
}
LOG.trace("Doing the trace for pipeline");
p.apply(Create.of("Hello", "World")).apply(ParDo.of(new DoFn<String, String>() {
@Override
public void processElement(ProcessContext c) {
LOG.trace("Doing the trace for pipeline");
c.output(c.element().toUpperCase());
}
})).apply(ParDo.of(new DoFn<String, Void>() {
@Override
public void processElement(ProcessContext c) {
LOG.trace("Doing the trace for pipeline");
LOG.info(c.element());
}
}));
这来自数据流示例,除了我添加的日志记录,以查看是否能够看到任何日志。
使用BlockingDataflowPipelineRunner
或DataflowPipelineRunner
运行管道时,需要执行两部分。首先,您的主要方法是在您的机器上本地运行以生成管道。当您调用p.run()
时,管道将被传送到Dataflow服务,在那里它在(可能有很多)虚拟机上运行。
直接在main
方法中的日志语句(如"Doing The trace for pipeline…")发生在您的机器上,并将显示在Eclipse控制台中。DoFn
中的日志语句发生在虚拟机上,并且只显示在云日志中,如DebuggingWordCount示例中所述。
指定workerLogLevelOverrides
会影响工作虚拟机的日志级别。因此,更改该值将影响DoFn
向Cloud Logging记录的内容。
要调整机器上运行的代码的日志级别(因此使用main
方法),您需要调整运行主程序的SLF4J或java.util.logging日志级别。例如,Stack Overflow上的这些说明建议使用日志配置文件。