-
Notifications
You must be signed in to change notification settings - Fork 32
Terminal Output Colouring
LNST supports coloured terminal output, which is enabled by default. This feature is highly configurable, and this page will explain the available configuration options.
Here are two examples of the output of LNST with the colouring with the extended colour palette:
The colouring is enabled by default. If you would prefer to turn it off, you can do it either temporarily by passing a CLI argument or permanently via a configuration option.
This option can be passed to both lnst-ctl
and lnst-slave
and it can be used to temporarily disable the colouring of the terminal output.
-m, --no-colours disable coloured terminal output
NOTE: The colouring is automatically disabled when the output is redirected to a file. In that case, you don't need to use this option.
Alternatively, if you would rather keep the feature disabled completely, you can set the disable_colours
option in the [colours]
section of the respective configuration file (either lnst-ctl.conf or lnst-slave.conf.
[colours]
disable_colours = 1
The colours LNST uses for different parts of the output can be configured for both the controller and the slaves in their respective configuration files using colour presets.
The colours of different parts of the output LNST displays are determined from colour presets. There are 10 presets currently available:
Preset | Description | Default Colour |
faded | for debugging output | yellow |
alert | for important messages | red |
highlight | highlighted text | blue |
pass | `PASS` colour | green |
fail | `FAIL` colour | red |
info | the `INFO` label | green |
debug | the `DEBUG` label | blue |
warning | the `WARNING` label | yellow |
error | the `ERROR` label | red |
log_header | the date and ip address in each log message | light-gray |
The colours displayed by LNST can be altered by changing these colour presets in the configuration file in the [colours]
section (works for both lnst-ctl
and lnst-slave
). Each preset is a tripple comprised of foreground colour, background colour, and bold flag.
[colours]
# preset foreground background bold flag
faded = default gray 0
info = light-blue default 1
warning = extended(208) default 1
The bold flag is a boolean value (true/false, 0/1, True/False). However, colours are a bit more complicated, as the colours can be configured either from the basic or the extended palette. The difference between using these two is explained bellow. If you would like to keep the default foreground/background colour, you can set it to default
in both cases.
Traditionally, terminals supported only very few colour options, typically 8 or 16. Today, it isn't quite so, as the vast majority of terminal emulators can work with up to 256 colours, nevertheless, these limitations for backwards compatibility are still there. Therefore, LNST uses these basic palette by default. With support of this limited colour palette, you can use the following colours in configuration:
black | dark-gray |
red | light-red |
green | light-green |
yellow | light-yellow |
blue | light-blue |
magenta | light-magenta |
cyan | light-cyan |
light-gray | white |
[colours]
# preset foreground background bold flag
faded = default light-blue 0
info = green white 1
warning = white light-red 1
Unfortunately, there are no aliases for the colours from the extended colour palette. Numbers from 0 to 255 are used to refer to different colours. The options are displayed on the picture bellow:
[colours]
# preset foreground background bold flag
faded = light-gray default 0
info = extended(228) default 1
warning = extended(208) default 1
NOTE: The palettes can be used together (some colours can be defined using the 8/16 and others with the extended palette).
Apart from the colouring that is there by default, you can actually add your own coloured logs when you are creating your own test modules. There are a few steps you need to take. First, you need to import the colouring functions, which are defined in the lnst.Common.Colours
module:
from lnst.Common.Colours import decorate_string, decorate_with_preset
There are two functions available. The first one, decorate_string()
allows you to paint the text with specific settings regardless of user configuration. The function takes three parameters:
def decorate_string(string, fg_colour=None, bg_colour=None, bold=False)
The first argument, string
is the text to be coloured with fg_colour
specified in the second argument. The colour of the background is determined from the third argument bg_colour
. The last parameter is a bool flag that indicates whether the text should be printed in bold. The colour values here are specified in the same way as in the configuration file, e.g., green
, extended(50)
, default
. The downside of using this function is that the users won't be able to configure the colour you set here, it will always be the same. However, you can use the other function:
def decorate_with_preset(string, preset)
This allows you to colour the string with one of the predefined presets. The users then will be able to change the colour by changing the colour of the respective preset. All the presets that are available at the moment are enumerated in a table above in section 3.1.
logging.info("A part of this string will be " + decorate_string("red", "light-red") + "!")
logging.info(decorate_string("Fancy blue background", "default", "blue")
coloured_msg = decorate_with_preset("This is WRONG!!!", "alert")
logging.error(coloured_msg)