# simplelog ## Summary simplelog is an opinionated logging package designed to facilitate easy and structured logging in Go applications with an absolute minimum of boilerplate. The idea is that you can add a single import line which replaces the stdlib `log/slog` default handler, and solve the 90% case for logging. ## Current Status Released v1.0.0 2024-06-14. Works as intended. No known bugs. ## Features - if output is a tty, outputs pretty color logs - if output is not a tty, outputs json - supports delivering each log message via a webhook ## Planned Features - supports delivering logs via tcp RELP (e.g. to remote rsyslog using imrelp) ## Installation To use simplelog, first ensure your project is set up with Go modules: ```bash go mod init your_project_name ``` Then, add SimpleLog to your project: ```bash go get sneak.berlin/go/simplelog ``` ## Usage Below is an example of how to use SimpleLog in a Go application. This example is provided in the form of a `main.go` file, which demonstrates logging at various levels using structured logging syntax. ```go package main import ( "log/slog" _ "sneak.berlin/go/simplelog" ) func main() { // log structured data with slog as usual: slog.Info("User login attempt", slog.String("user", "JohnDoe"), slog.Int("attempt", 3)) slog.Warn("Configuration mismatch", slog.String("expected", "config.json"), slog.String("found", "config.dev.json")) slog.Error("Failed to save data", slog.String("reason", "permission denied")) } ``` ## Entrypoints This repository adheres to the [Scripts to Rule Them All](https://github.com/github/scripts-to-rule-them-all) standard: normalized scripts in `script/` are the entrypoints for the development workflow, and the Makefile targets are thin shims that call them. The scripts are POSIX sh (not bash) so they run in minimal containers such as alpine. We provide: - `script/bootstrap` — install all dependencies (go and golangci-lint if missing, then `go mod download`) - `script/setup` — set up the repo for development after a fresh clone: runs `script/bootstrap`, then `script/install-precommit` - `script/projectname` — output the project name (our own extension); used by `script/docker` for the image tag - `script/test` — run the test suite (`go test -v ./...`) - `script/lint` — run golangci-lint - `script/fmt` — format all files (goimports plus `golangci-lint run --fix`; writes) - `script/fmt-check` — check formatting (read-only); fails if `gofmt -l` reports files - `script/check` — run all checks: `test`, `lint`, `fmt-check` (our own extension) - `script/docker` — build the Docker image, tagged via `script/projectname` (byte-identical across repos) - `script/cibuild` — cd to the repo root and `docker build .` (what CI runs; the image build runs the checks) - `script/precommit` — run by the git pre-commit hook (our own extension); runs a `go mod tidy` guard, then `script/check` - `script/install-precommit` — installs the git pre-commit hook (our own extension); `make hooks` shims to it `make hooks` installs the pre-commit hook that runs `script/precommit`. ## License [WTFPL](./LICENSE)