Logging

bullets: a colorful, goreleaser-style logger for Go CLIs

A small Go logging library focused on beautiful terminal output — bullets, spinners, progress, and updatable lines — without dragging in a heavy framework.

I love how goreleaser looks when it runs. Tidy bullets, indented sub-steps, the right amount of color, occasional spinners. Every time I write a Go CLI of my own, I want that aesthetic — and I don’t want to pull in a 100-dependency logging framework to get it. So I wrote bullets.

Tools golang cli logging

logwrap: prefix any command's output with timestamps and log levels

A Go wrapper that intercepts stdout/stderr in real time and decorates each line with timestamps, levels, user, and PID

I have a recurring frustration: I run a script in CI, it produces output, something fails, and I have no idea when any of it happened. Did the failure come 200ms after start or two minutes in? Was it stdout or stderr? It’s the difference between “took a minute to figure out” and “took half an hour.”

The fix is to prefix every line with a timestamp. Easy in theory, annoying in practice — especially if you want the prefix to differ between stdout and stderr, or if you want UTC, or colors, or to drop the prefix in production. So I wrote logwrap: a small Go binary you put in front of any command and it adds a configurable prefix to every line, in real time, without buffering.

Tools golang cli logging