快速结论:在 Dify 工作流的代码执行节点中,使用 print 或 logging 不会直接将调试信息输出到 Docker 控制台(例如 docker logs dify-api-1)。这是设计如此,官方不推荐也不支持在工作流代码节点中使用 print 进行调试;优先通过主动抛出异常的方式,把变量值写到节点错误日志中。
适用环境:Dify 工作流(Workflow)的代码执行节点(Code Execution Node),Docker Compose 部署方式(涉及 docker logs dify-api-1 或类似容器日志查看)。Dify 的 Python 代码执行节点内部使用 extensions/ext_logging.py 配置了 RotatingFileHandler(文件日志)和 StreamHandler(控制台日志),但 Issue 中未确认操作系统、Python 版本等具体环境信息。
最快修复方案:暂无确认的一步修复方案。Issue 结论明确指出:不支持在 workflow 中使用 print;如果需要查看中间变量,请改用以下主动中断方式把变量值暴露到错误信息中:
Python 节点:raise Exception(variable);JavaScript 节点:throw JSON.stringify(variable)。执行后节点会失败,并在错误日志中显示该变量内容。
注意事项:上述“通过抛异常查看变量”的方法仅适用于调试场景(不是为了实现业务控制流),调试完需要移除。不要依赖修改日志级别或 Docker 日志配置来捕获 print 输出——Issue 中未给出可靠的日志配置方案,仅停留在推测层面。
问题场景
用户在 Dify 工作流的代码执行节点(Python 或 JavaScript)中编写调试代码,希望通过 print 语句或 Python logging 包把中间变量输出到 Docker 容器日志(例如 docker logs dify-api-1)中,但发现控制台没有任何调试输出。
报错原文
How to print infomation in code execution nodes of the workflow?
Using print or the logging package doesn't output debug information in the docker -f docker-api-1.
For questions please use discussion instead. We do not support use print in workflow.
原因分析
这是一个使用方式(而非程序崩溃)导致的问题,可能原因如下:
- 设计限制:Dify 官方明确不支持在工作流代码执行节点中使用
print作为调试手段。即使代码节点底层配置了日志 Handler,也不保证print内容会同步到 Docker 控制台。 - 日志流向不一致:Dify 代码执行节点内部通过
RotatingFileHandler把日志写入文件,同时通过StreamHandler输出到控制台,但节点运行的 stdout 流未必与docker logs对接,所以看不到输出。 - 日志级别过滤:另一个可能原因是日志级别设置得较高(如 WARNING/ERROR),默认不会显示
debug或info级别的信息,因此使用logging.info时也可能看不到内容。
需要说明,Dify 的工作流“问题咨询”更适合放在 Discussion 板块,而不是 Issue 中提问,这也是 Issue 被关闭的原因之一。
环境排查
- 确认 Dify 的部署方式是否为 Docker Compose(例如通过
docker logs dify-api-1查看日志)。 - 检查 Dify 的代码执行节点使用语言是 Python 还是 JavaScript。
- 如果你决定使用日志方式而非抛异常,先确认 Dify 服务端扩展日志模块(
api/extensions/ext_logging.py)中的日志级别和 Handler 配置;但这只是排查方向,并非 Issue 中的已验证结论。 - 检查容器日志中是否存在任何来自代码节点的日志(例如错误堆栈、系统级告警),以判断日志链路是否正常。
解决步骤
- 停止使用
print作为调试手段:在 Dify 工作流代码节点中,不要依赖print或logging在 Docker 控制台中输出调试信息。这是 Issue 中确认的结论(We do not support use print in workflow)。 - 在 Python 代码节点中通过抛异常查看变量:如果你只是想在出错时看到某个变量值,可以在代码节点中写入
raise Exception(variable)。当你希望观察某个中间变量temp_result时,把该变量放到异常消息里。执行后节点会失败,并在错误日志中显示该变量的内容。 - 在 JavaScript 代码节点中通过抛异常查看变量:同理,使用
throw JSON.stringify(variable)可以主动让节点失败,并把变量序列化后展示在错误信息中。 - 确认节点确实执行到了抛出位置:如果抛异常后并没有看到预期错误,说明代码可能在更早的位置就已经 return 或发生了其他未捕获异常;此时需要结合节点输入数据逐步缩小范围。
- 调试完成记得还原代码:上述“抛异常”的方法仅供开发联调时临时中断流程观察数据,调试完毕后务必移除
raise Exception或throw,以免影响工作流正常运行。
验证方法
执行修改后的代码节点,如果节点运行失败,并且在 Dify 的错误日志中能看到你主动抛出的变量内容,说明调试路径有效。同时可以在 docker logs dify-api-1 中确认没有出现任何来自 print 的输出,以验证“print 不支持”的结论。调试完成后,移除异常抛出语句并确认工作流恢复正常,即为解决完成。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


