Python日志未在Google Dataflow中显示问题求助
补全日志记录器配置
只设置日志级别不够,自定义logger默认没有绑定输出Handler,导致日志无法被Worker捕获。可以添加StreamHandler并做防重复配置:import logging logger = logging.getLogger('TEST_LOGGER') logger.setLevel(logging.INFO) # 避免重复添加Handler if not logger.handlers: handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler)确认日志执行上下文
如果check_file_size是在Driver进程(本地提交作业的进程)执行,日志只会出现在本地终端,不会同步到Dataflow UI。要确保函数是作为PTransform的一部分(比如ParDo、Map操作)在Worker端执行。可以在Driver和Worker分别打日志,区分输出位置。检查UI日志筛选规则
进入Dataflow作业详情页,确认日志筛选条件是否正确:默认可能只显示WARNING及以上级别,需要手动切换到INFO级别;同时要确保筛选器包含自定义logger名称TEST_LOGGER。另外检查项目Cloud Logging是否有排除规则过滤了目标日志。验证print语句的捕获逻辑
Dataflow Worker默认捕获stdout/stderr,但特殊上下文(比如子进程)的print可能无法被捕获。优先用logging代替print;如果必须用print,可以尝试重定向输出到logging:import sys logging.basicConfig(stream=sys.stdout, level=logging.INFO)排查异常记录情况
如果异常被内部捕获未向上抛出,UI可能不会显示。抛出异常时同时用logger.error记录,或者确保异常导致Worker进程报错,这样会出现在作业的错误日志中。另外查看作业的「Failed Workers」或「Errors」标签页,确认是否有未被捕获的异常记录。核对依赖与运行时兼容性
避免使用会修改全局logging配置的第三方包,尽量用标准库logging模块。同时检查Dataflow SDK版本,优先使用稳定版,旧版本可能存在日志捕获bug。
内容的提问来源于stack exchange,提问作者Ryank12345

