Yocto:食谱中的自定义彩色输出? 上下文问题

问题描述

上下文

当我使用 bitbake 通过 Yocto 处理食谱时,我希望能够在屏幕上打印有用的输出。到目前为止,有几种方法可以做到这一点,但它们不是很实用。让我列举一下认选项:

  1. 使用:bbinfo "my message"bitbake --verbose
  2. 使用:bbdebug 1 "my message"bitbake -D(可以扩展到更多调试级别)
  3. 使用:bbwarn "my message",没有额外的标志

问题

使用选项 (1) 会在终端上输出大量不必要的混乱,并且还没有彩色输出。选项 (2) 是彩色的,但不幸的是,它也捕获了来自其他构建组件的大量调试消息,这些消息淹没了输出。我现在一直在使用选项 (3),因为它可以让我的消息脱颖而出,而不会出现其他不相关的信息。

所以我的问题是,如何为我自己的消息启用自定义日志记录(即绿色或蓝色)?这将使我更容易区分我想要的重要输出,而不会意外地使不必要的信息出现

解决方法

Bitbake 负责以适当的颜色打印日志消息。如果您想要不同的颜色,您可以通过修改添加新类型的日志消息: https://gitlab.com/yoctoproject/poky/-/blob/master/bitbake/lib/bb/build.py#L475 似乎是 bbwarn/bbdebug/bbplain/etc... shell 命令被转换为 Python 的 bb.warn,bb.debug,bb.plain 等.. 在此处定义:https://gitlab.com/yoctoproject/poky/-/blob/master/bitbake/lib/bb/__init__.py#L132-165 并且其颜色和日志级别在此处定义的 BBLogFormatter 类中定义:https://gitlab.com/yoctoproject/poky/-/blob/master/bitbake/lib/bb/msg.py#L22

我个人会尝试以与处理不同调试级别相同的方式添加警告级别,然后您可以将警告级别与特定颜色相关联。

然而,这会修改 bitbake 本身,这是无法通过 bbappends 或其他 btibake 机制实现的,因为它们是 Python 脚本。

否则,我想知道是否不可能在您想要使用的配方/任务/功能中定义自己的记录器,例如有一个 bbclass,它使用 Python logging 模块设置您需要的一切,只需使用它而不是 bbwarn 或 bb.warn。