python - 在谷歌云 apache 梁 python sdk 中记录信息/调试消息
问题描述
我想在运行数据流程序时在屏幕上打印信息或调试或异常消息。在以“DirectRunner”身份运行流水线时,我能够做到这一点。但是同一个程序在使用运行程序“DataflowRunner”运行时不会在数据流控制台上打印任何内容。这是代码,它非常基本。
import apache_beam as beam
from apache_beam.io import ReadFromText
from apache_beam.io import WriteToText
from apache_beam.options.pipeline_options import PipelineOptions
from apache_beam.options.pipeline_options import SetupOptions
import logging
class ProcessData(beam.DoFn):
def process(self, element, var):
logging.getLogger().setLevel(logging.INFO)
logging.info("Print the element %s",element)
logging.info("Print the var %s",var)
logging.getLogger().setLevel(logging.INFO)
#Initialize the pipeline
pipeline_options = PipelineOptions()
pipeline_options.view_as(SetupOptions).save_main_session = True
p = beam.Pipeline(options=pipeline_options)
p | 'Read the data file' >> beam.io.textio.ReadFromText('gs://rohan_staging/data/test.txt') | 'Process Data' >> beam.ParDo(ProcessData(),1)
p.run()
我之前能够在控制台上看到这些消息,但突然间我不再看到它们了。我不知道我做错了什么,或者我以前做错了什么。请建议我如何在云数据流控制台上查看信息消息。
解决方案
我在您共享的代码段中看不到任何问题,实际上它符合文档中提供的在 Dataflow 中记录管道消息的所有步骤。因此,我使用您的代码运行了一个示例管道,并且能够验证所有内容都已成功记录(请参阅Print the element...
屏幕截图 2 和 3 中的日志):
正如我之前链接的日志记录文档中所解释的,步骤日志和作业日志选项卡仅分别显示步骤或作业的最新和相关日志,因此您应该转到管道的 Stackdriver 日志以获得完整的查看您的日志(您可以稍后根据您的偏好进行过滤)。
鉴于您说您能够更早地看到日志但现在看不到,可能会发生几件事:
- 您之前正在检查步骤日志(显示您添加的日志),现在您正在查看作业日志(不显示它们)。
- 日志已从步骤日志选项卡中消失,该选项卡仅显示最近的日志。
- 您的日志已从 Stackdriver 过期(根据保留限制)。
推荐阅读
- sql-server - 更改表以仅从现有数据中获取日期名称
- javascript - IIFE 函数是否在调用它的同一函数上下文中执行
- c# - .NET Core MVC 启动等效项
- google-calendar-api - Google Calendar API 与 python 网站同步
- reactjs - 如何在 react.js 的一个组件中导入 bootsrap
- asp.net-core - 是否可以部署未编译的 ASP.NET Razor Pages 网站?
- javascript - 将配置/点文件作为一个包共享?
- rust - Rust:如何从文件中获取输入并计算它?
- ios - 从 swift 中的链接下载 facebook 视频
- javascript - 在 JavaScript 中将前缀转换为中缀