该journalctl
命令将对其消息进行颜色编码。摘自其手册页:
当输出到 tty 时,行会根据优先级进行着色:级别 ERROR 及更高的行会显示为红色;突出显示 NOTICE 级别及更高级别的行;DEBUG 级别的行显示为浅灰色;其他行则正常显示。
在我的任何系统上,红色都是红色。但“突出显示”的概念因系统而异。
例如,gnome 终端(带有TERM=xterm-256color
)对一台机器使用黄色:
但是当ssh
在第二台机器上执行此操作时,相同的 journalctl 和相同的 TERM var 以及相同的终端显示如下:
因此,“突出显示”的颜色必须在终端配置之外设置,并且依赖于主机。问题是:它在哪里定义?
笔记: 有一个 gnome 终端首选项设置(首选项/配置文件/颜色/突出显示颜色),但是这控制着一些完全不同的东西!当我设置它时,它会改变“选择颜色”,因此当我用鼠标在终端中选择文本时。显然术语突出显示颜色在这里具有歧义,可能意味着不同的事情。
上面的屏幕截图显示了“突出显示颜色”,但最好称为“选择颜色”,因为这是我设置时发生的变化。
systemctl 如何定义终端的“高亮颜色”?为什么当我远程登录另一个系统时,终端高亮颜色会发生变化?
这两个系统都运行 Ubuntu 23.04 操作系统。
两个系统都运行相同版本的 systemd。
两个系统都有空配置/etc/systemd/journald.conf
答案1
首先,手册页令人困惑。当它说“NOTICE 级别及更高级别的行被突出显示,”这确实意味着它是黄色的。
这是一个文档错误。
在里面代码ansi_highlight_yellow()
,手册页中有一个概念导致了这种混淆。
此黄色 ANSI 颜色代码是硬编码的,不可配置。
我的两台机器在系统日志中显示警告颜色不同的原因是颜色精度造成的。
环境变量SYSTEMD_COLORS
不仅仅是一个布尔值,因为它采用特殊值16
和256
。
因为一台机器设置为输出256色,另一台机器设置为输出16色,所以结果不同。
当我设置SYSTEMD_COLORS
相同的变量时,我观察到相同的颜色。
总之,颜色无法设置,它们只是红色、黄色、灰色和无色。它们在屏幕上的显示方式取决于终端显示的是 16 色还是 256 色,而这又取决于环境变量。