首页 > 解决方案 > Syslog - 如何显示彩色消息?

问题描述

我需要澄清一下,我不是要为日志输出着色,我只对写入的程序输出感兴趣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

这是下面的 Bash 脚本/home/username/colors.sh(从这里抓取):

#!/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

到目前为止我尝试过的事情

标签: bashsystemdsyslogtailansi-escape

解决方案


syslog默认情况下转义 ansi 颜色代码[1]。要启用将以下内容添加到/etc/rsyslog.conf

$EscapeControlCharactersOnReceive off

然后重新启动rsyslog和您的服务。

$ systemctl restart rsyslog
$ systemctl restart my_color_service

推荐阅读