From c2b9d0e2defd04e1afb9712132a66681d077eb42 Mon Sep 17 00:00:00 2001 From: Uros Marolt Date: Sat, 3 Sep 2022 13:06:22 +0200 Subject: [PATCH] CLI utility to pipe JSON logs through to pretty print and colorize them (#449) --- cmd/prettylog/README.md | 40 ++++++++++++++++++++++++++++++++++++++ cmd/prettylog/prettylog.go | 26 +++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 cmd/prettylog/README.md create mode 100644 cmd/prettylog/prettylog.go diff --git a/cmd/prettylog/README.md b/cmd/prettylog/README.md new file mode 100644 index 0000000..2412915 --- /dev/null +++ b/cmd/prettylog/README.md @@ -0,0 +1,40 @@ +# Zerolog PrettyLog + +This is a basic CLI utility that will colorize and pretty print your structured JSON logs. + +## Usage + +You can compile it or run it directly. The only issue is that by default Zerolog does not output to `stdout` +but rather to `stderr` so we must pipe `stderr` stream to this CLI tool. + +### Linux + +These commands will redirect `stderr` to our `prettylog` tool and `stdout` will remain unaffected. + +1. Compiled version + +```shell +some_program_with_zerolog 2> >(prettylog) +``` + +2. Run it directly with `go run` + +```shell +some_program_with_zerolog 2> >(go run cmd/prettylog/prettylog.go) +``` + +### Windows + +These commands will redirect `stderr` to `stdout` and then pipe it to our `prettylog` tool. + +1. Compiled version + +```shell +some_program_with_zerolog 2>&1 | prettylog +``` + +2. Run it directly with `go run` + +```shell +some_program_with_zerolog 2>&1 | go run cmd/prettylog/prettylog.go +``` diff --git a/cmd/prettylog/prettylog.go b/cmd/prettylog/prettylog.go new file mode 100644 index 0000000..61bf8b8 --- /dev/null +++ b/cmd/prettylog/prettylog.go @@ -0,0 +1,26 @@ +package main + +import ( + "fmt" + "io" + "os" + + "github.com/rs/zerolog" +) + +func isInputFromPipe() bool { + fileInfo, _ := os.Stdin.Stat() + return fileInfo.Mode()&os.ModeCharDevice == 0 +} + +func main() { + if !isInputFromPipe() { + fmt.Println("The command is intended to work with pipes.") + fmt.Println("Usage: app_with_zerolog | 2> >(prettylog)") + os.Exit(1) + return + } + + writer := zerolog.NewConsoleWriter() + _, _ = io.Copy(writer, os.Stdin) +}