When troubleshooting Linux systems, journalctl is our go-to tool for examining system logs. While functional, the default monochromatic output makes it challenging to quickly identify critical events among thousands of log entries. Unlike dmesg --color which shows colored output by default, journalctl requires explicit configuration for proper colorization.
The simplest way to enable colors is using the --color flag:
journalctl --color=always
This persists for your current session. For permanent configuration, edit your .bashrc or create an alias:
alias journalctl='journalctl --color=always'
Systemd allows detailed color configuration through systemd-journald settings. Create or modify /etc/systemd/journald.conf:
[Journal]
Color=yes
Highlight=yes
LineMax=1024
Then reload the configuration:
systemctl restart systemd-journald
For better visual hierarchy, use priority filtering with colors:
journalctl -p err --color=always
Common priority levels:
emerg(0): Bright redalert(1): Redcrit(2): Bright yellowerr(3): Yellowwarning(4): Magenta
For system-wide color settings, create a drop-in configuration:
mkdir -p /etc/systemd/journald.conf.d
echo -e '[Journal]\nColor=yes\nHighlight=yes' > /etc/systemd/journald.conf.d/colors.conf
systemctl restart systemd-journald
Advanced users can modify color schemes through terminal environment variables:
export SYSTEMD_COLORS=16
export SYSTEMD_COLORS_DIRECTORY=/usr/share/systemd/color-schemes/
journalctl --update-environment
Available color schemes include dark, light, and solarized.
If colors don't appear:
- Verify terminal supports 256 colors with
echo $TERM - Check
systemd --version(v230+ recommended) - Test with
SYSTEMD_COLORS=debug journalctlfor diagnostics
For pipelines that strip colors, use ANSI escape code preservation:
journalctl --color=always | less -R
Or when grepping colored output:
journalctl --color=always | grep --color=always "error"
When working with journalctl, many developers notice that the default output lacks visual differentiation. While some critical messages might be highlighted, the majority of log entries appear in monochrome, making it difficult to quickly scan through logs.
Unlike dmesg which has an explicit --color flag, journalctl's color behavior is controlled differently. The good news is that journalctl does support color output through the following methods:
# Basic color output
journalctl --output=short-precise --color=always
# For persistent configuration
sudo mkdir -p /etc/systemd/journald.conf.d
echo -e "[Journal]\nColor=yes" | sudo tee /etc/systemd/journald.conf.d/color.conf
sudo systemctl restart systemd-journald
For more granular control over colors, you can use these approaches:
# Force color even when piping to less
journalctl --color=always | less -R
# Combine with grep for specific patterns
journalctl --color=always | grep --color=always "error\|fail\|warning"
# JSON output with jq for colorized parsing
journalctl -o json | jq -C . | less -R
To make color output permanent, edit or create configuration files:
# ~/.bashrc or ~/.zshrc alias
alias jc="journalctl --color=always"
# Systemd-wide configuration
sudo tee /etc/systemd/journald.conf.d/10-color.conf <<EOF
[Journal]
Color=yes
EOF
If colors still don't appear:
- Verify your terminal supports ANSI colors with
echo -e "\e[31mRED\e[0m" - Check
$TERMenvironment variable is set correctly - Try forcing colors with
journalctl --color=force
For developers who need more sophisticated log visualization:
# Use ccze for enhanced coloring
journalctl -f | ccze -A
# Pipe to multitail for multiple color schemes
journalctl -f | multitail -cS syslog -