clawbot 9c59619478
check / check (push) Successful in 19s
Merge branch 'next' into merge/next-to-main-1.1.0 for 1.1.0
Brings the scripts-to-rule-them-all scaffold from `next` (script/
entrypoints, Makefile shims, .gitea/workflows/check.yml, vendored
REPO_POLICIES.md) onto `main`, which meanwhile moved to golangci-lint
v2.12.2 with the canonical config.

Only TODO.md conflicted: both sides prepended an entry to Completed
Steps. Kept both in reverse-chronological order and normalized the
`next` entry to the file's `*` bullet style.

.golangci.yml is unchanged from `main`.

Reconciling script/lint, script/fmt-check and script/check with
golangci-lint v2.12.2 is deliberately left to phase 2.

Part of #26
2026-09-04 21:40:51 +00:00
2024-06-14 05:39:03 -07:00
2024-05-22 14:52:20 -07:00
2024-05-13 21:43:47 -07:00
2024-06-14 05:53:22 -07:00
2024-05-13 21:43:47 -07:00

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:

go mod init your_project_name

Then, add SimpleLog to your project:

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.

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 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

S
Description
sane logging defaults for go
Readme WTFPL
191 KiB
Languages
Go 89.6%
Dockerfile 4.6%
Makefile 3.8%
Shell 2%