You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel的BUILD或rules.bzl文件中添加日志查看规则传入参数

Bazel 规则参数快速调试方案

不需要导入logging模块,Bazel的Starlark配置语言运行环境不支持引入Python标准库的logging组件,直接用内置的print()函数即可实现临时调试打印,无需额外配置。

不同场景的使用示例

在rules.bzl规则实现中打印传入参数

在规则的实现函数中直接调用print()即可读取传入的属性值:

def _custom_rule_impl(ctx):
    # 打印单个指定参数
    print("传入的srcs参数值:", ctx.attr.srcs)
    # 批量打印所有非私有规则属性
    for attr_name in dir(ctx.attr):
        if not attr_name.startswith("_"):
            attr_val = getattr(ctx.attr, attr_name)
            print(f"规则属性[{attr_name}]:{repr(attr_val)}")
    
    # 原有规则逻辑保持不变
    ...

custom_rule = rule(
    implementation = _custom_rule_impl,
    attrs = {
        "srcs": attr.label_list(allow_files = True),
        "output": attr.output(),
        "extra_args": attr.string_list(default = []),
    }
)

在BUILD文件中打印参数

如果需要校验BUILD文件内的变量值、规则入参,直接在BUILD文件内调用print()即可:

# BUILD文件内容
lib_name = "demo_service"
# 打印BUILD内定义的变量
print("当前构建的库名:", lib_name)

custom_rule(
    name = lib_name,
    srcs = glob(["*.cc"]),
    output = "demo.bin",
    extra_args = ["--debug", "--verbose"],
)

查看打印结果

正常执行Bazel构建/运行命令即可,打印内容会直接输出到命令行stderr流:
bazel build //path/to:your_target

注意事项

  • 调试完成后请及时删除打印语句,避免冗余输出影响构建日志可读性
  • 打印复杂类型(如Label、结构体)时,配合repr()函数可以得到更清晰的结构化输出

内容的提问来源于stack exchange,提问作者uh_big_mike_boi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:36:01