100 lines
3.1 KiB
Markdown
100 lines
3.1 KiB
Markdown
# 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)
|