Syslog - 如何显示彩色消息?
Syslog - How to Show Colorized Messages?
我需要澄清一下,我不打算对日志输出进行着色,我只对写入 syslog
的程序输出感兴趣。
场景是这样的,我有一个 systemd
单元服务,运行 是一个脚本,表示 Bash 中的 256 种颜色。
这是服务单元文件:
[Unit]
Description=Bash Color Service
[Service]
Type=simple
EnvironmentFile=/etc/environment
ExecStart=/home/username/colors.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bashcolors
Restart=on-failure
RestartSec=10
User=username
Group=username
[Install]
WantedBy=multi-user.target
这是 /home/username/colors.sh
下的 Bash 脚本(从 here 抓取的):
#!/bin/bash
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
for fgbg in 38 48 ; do # Foreground / Background
for color in {0..255} ; do # Colors
# Display the color
printf "\e[${fgbg};5;%sm %3s \e[0m" $color $color
# Display 6 colors per lines
if [ $((($color + 1) % 6)) == 4 ] ; then
echo # New line
fi
done
echo # New line
done
exit 0
运行 这个脚本会向我的终端输出一些彩色的输出,像这样:
好了,现在进入实际问题。当我 运行 服务时,系统日志输出 确实包含转义颜色字符 ,但没有以颜色显示。这是 tail -f /var/log/syslog
的一个片段输出,包含相关信息:
bashcolor[19892]: #033[48;5;202m 202 #033[0m#033[48;5;203m 203 #033[0m#033[48;5;204m 204 #033[0m#033[48;5;205m 205 #033[0m#033[48;5;206m 206 #033[0m#033[48;5;207m 207 #033[0m
bashcolor[19892]: #033[48;5;208m 208 #033[0m#033[48;5;209m 209 #033[0m#033[48;5;210m 210 #033[0m#033[48;5;211m 211 #033[0m#033[48;5;212m 212 #033[0m#033[48;5;213m 213 #033[0m
bashcolor[19892]: #033[48;5;214m 214 #033[0m#033[48;5;215m 215 #033[0m#033[48;5;216m 216 #033[0m#033[48;5;217m 217 #033[0m#033[48;5;218m 218 #033[0m#033[48;5;219m 219 #033[0m
bashcolor[19892]: #033[48;5;220m 220 #033[0m#033[48;5;221m 221 #033[0m#033[48;5;222m 222 #033[0m#033[48;5;223m 223 #033[0m#033[48;5;224m 224 #033[0m#033[48;5;225m 225 #033[0m
bashcolor[19892]: #033[48;5;226m 226 #033[0m#033[48;5;227m 227 #033[0m#033[48;5;228m 228 #033[0m#033[48;5;229m 229 #033[0m#033[48;5;230m 230 #033[0m#033[48;5;231m 231 #033[0m
bashcolor[19892]: #033[48;5;232m 232 #033[0m#033[48;5;233m 233 #033[0m#033[48;5;234m 234 #033[0m#033[48;5;235m 235 #033[0m#033[48;5;236m 236 #033[0m#033[48;5;237m 237 #033[0m
bashcolor[19892]: #033[48;5;238m 238 #033[0m#033[48;5;239m 239 #033[0m#033[48;5;240m 240 #033[0m#033[48;5;241m 241 #033[0m#033[48;5;242m 242 #033[0m#033[48;5;243m 243 #033[0m
bashcolor[19892]: #033[48;5;244m 244 #033[0m#033[48;5;245m 245 #033[0m#033[48;5;246m 246 #033[0m#033[48;5;247m 247 #033[0m#033[48;5;248m 248 #033[0m#033[48;5;249m 249 #033[0m
bashcolor[19892]: #033[48;5;250m 250 #033[0m#033[48;5;251m 251 #033[0m#033[48;5;252m 252 #033[0m#033[48;5;253m 253 #033[0m#033[48;5;254m 254 #033[0m#033[48;5;255m 255 #033[0m
到目前为止我已经尝试过的事情:
syslog
默认转义 ansi 颜色代码 [1]。要启用,请将以下内容添加到 /etc/rsyslog.conf
$EscapeControlCharactersOnReceive off
然后重新启动 rsyslog
和您的服务。
$ systemctl restart rsyslog
$ systemctl restart my_color_service
我需要澄清一下,我不打算对日志输出进行着色,我只对写入 syslog
的程序输出感兴趣。
场景是这样的,我有一个 systemd
单元服务,运行 是一个脚本,表示 Bash 中的 256 种颜色。
这是服务单元文件:
[Unit]
Description=Bash Color Service
[Service]
Type=simple
EnvironmentFile=/etc/environment
ExecStart=/home/username/colors.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bashcolors
Restart=on-failure
RestartSec=10
User=username
Group=username
[Install]
WantedBy=multi-user.target
这是 /home/username/colors.sh
下的 Bash 脚本(从 here 抓取的):
#!/bin/bash
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
for fgbg in 38 48 ; do # Foreground / Background
for color in {0..255} ; do # Colors
# Display the color
printf "\e[${fgbg};5;%sm %3s \e[0m" $color $color
# Display 6 colors per lines
if [ $((($color + 1) % 6)) == 4 ] ; then
echo # New line
fi
done
echo # New line
done
exit 0
运行 这个脚本会向我的终端输出一些彩色的输出,像这样:
好了,现在进入实际问题。当我 运行 服务时,系统日志输出 确实包含转义颜色字符 ,但没有以颜色显示。这是 tail -f /var/log/syslog
的一个片段输出,包含相关信息:
bashcolor[19892]: #033[48;5;202m 202 #033[0m#033[48;5;203m 203 #033[0m#033[48;5;204m 204 #033[0m#033[48;5;205m 205 #033[0m#033[48;5;206m 206 #033[0m#033[48;5;207m 207 #033[0m
bashcolor[19892]: #033[48;5;208m 208 #033[0m#033[48;5;209m 209 #033[0m#033[48;5;210m 210 #033[0m#033[48;5;211m 211 #033[0m#033[48;5;212m 212 #033[0m#033[48;5;213m 213 #033[0m
bashcolor[19892]: #033[48;5;214m 214 #033[0m#033[48;5;215m 215 #033[0m#033[48;5;216m 216 #033[0m#033[48;5;217m 217 #033[0m#033[48;5;218m 218 #033[0m#033[48;5;219m 219 #033[0m
bashcolor[19892]: #033[48;5;220m 220 #033[0m#033[48;5;221m 221 #033[0m#033[48;5;222m 222 #033[0m#033[48;5;223m 223 #033[0m#033[48;5;224m 224 #033[0m#033[48;5;225m 225 #033[0m
bashcolor[19892]: #033[48;5;226m 226 #033[0m#033[48;5;227m 227 #033[0m#033[48;5;228m 228 #033[0m#033[48;5;229m 229 #033[0m#033[48;5;230m 230 #033[0m#033[48;5;231m 231 #033[0m
bashcolor[19892]: #033[48;5;232m 232 #033[0m#033[48;5;233m 233 #033[0m#033[48;5;234m 234 #033[0m#033[48;5;235m 235 #033[0m#033[48;5;236m 236 #033[0m#033[48;5;237m 237 #033[0m
bashcolor[19892]: #033[48;5;238m 238 #033[0m#033[48;5;239m 239 #033[0m#033[48;5;240m 240 #033[0m#033[48;5;241m 241 #033[0m#033[48;5;242m 242 #033[0m#033[48;5;243m 243 #033[0m
bashcolor[19892]: #033[48;5;244m 244 #033[0m#033[48;5;245m 245 #033[0m#033[48;5;246m 246 #033[0m#033[48;5;247m 247 #033[0m#033[48;5;248m 248 #033[0m#033[48;5;249m 249 #033[0m
bashcolor[19892]: #033[48;5;250m 250 #033[0m#033[48;5;251m 251 #033[0m#033[48;5;252m 252 #033[0m#033[48;5;253m 253 #033[0m#033[48;5;254m 254 #033[0m#033[48;5;255m 255 #033[0m
到目前为止我已经尝试过的事情:
syslog
默认转义 ansi 颜色代码 [1]。要启用,请将以下内容添加到 /etc/rsyslog.conf
$EscapeControlCharactersOnReceive off
然后重新启动 rsyslog
和您的服务。
$ systemctl restart rsyslog
$ systemctl restart my_color_service