Snazy is a simple tool to parse json logs and output them in a nice format with nice colors.
As a tekton
developer who has to dig into controller/webhook logs I wanted
something that is a bit easier to look in the eyes and identify error/info/warning statements easily.
You do not have to use it only with tekton
but work well with projects that uses
go-uber/zap
library like
knative
and many others.
Go to the release page and grab the archive or package targeting your platform.
With your favourite aurhelper for example yay :
shell
yay -S snazy-bin
shell
brew tap chmouel/snazy https://github.com/chmouel/snazy
brew install snazy
shell
cargo install snazy
shell
kubectl logs deployment/pod foo|docker run -i ghcr.io/chmouel/gosmee
Snazy is build with rust, if you want to compile it directly you just need to
grab the source and run cargo build
.
snazy
by "piping" logs into it :shell
kubectl logs deployment/controller|snazy
It supports streaming too. When you have a kubectl logs -f
it will just wait
for input and snazzily print your logs from the stream (one line at a time).
you can pass one or many files on the command line to snazy
and it will
parse them rather than using the standard input.
If you do not pass a file and your input comes from
https://github.com/boz/kail it will automatically detect it and print the
namespace/pod[container]
as prefix :
If you do not want to have the namespace/pod[container]
information printed you can add the
flag --kail-no-prefix
.
If you want to highlight some patterns you can add the option -r REGEXP
and
snazy
will highlight it. You can have many -r
switches with many
regexps, and you get different highlight for each match.
If you want to only show some levels, you can add the flag -f
to filter by
level or many -f
for many levels, for example, this only show warning and
error from the log:
shell
% kubectl log pod|snazy -f warning -f error
--level-symbols
or set the environment variable SNAZY_LEVEL_SYMBOLS
, snazy will show some pretty emojis rather than plain log level label :You can customize the time printed with the -t
option, which respect the
strftime
format
strings.
You can do your own field matching with the -k/--json-keys
flag, it accepts the
field msg
, level
and ts
. Those fields target a key in json used for
parsing. The values should be:
msg
: The message text (string)level
: The log level (eg: info) (string)ts
: The timestamp, a float or a datetimeIf any of those fields are missing the parser will fails.
Shell completions are available for most shells in the misc/completions and it will be automatically installed with the aur/brew package.
Chmouel Boudjnah <@chmouel>