https://github.com/abursavich/zapr
Zapr provides a logr.LogSink implementation using zap. It includes optional flag registration, Prometheus metrics, and a standard library *log.Logger adapter.
https://github.com/abursavich/zapr
logging logr metrics prometheus zap
Last synced: 5 months ago
JSON representation
Zapr provides a logr.LogSink implementation using zap. It includes optional flag registration, Prometheus metrics, and a standard library *log.Logger adapter.
- Host: GitHub
- URL: https://github.com/abursavich/zapr
- Owner: abursavich
- License: bsd-3-clause
- Created: 2020-09-23T22:35:18.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-02-28T22:41:15.000Z (over 3 years ago)
- Last Synced: 2025-03-01T16:04:39.300Z (over 1 year ago)
- Topics: logging, logr, metrics, prometheus, zap
- Language: Go
- Homepage: https://bursavich.dev/zapr
- Size: 87.9 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Zapr
[](https://raw.githubusercontent.com/abursavich/zapr/master/LICENSE)
[](https://pkg.go.dev/bursavich.dev/zapr)
[](https://goreportcard.com/report/bursavich.dev/zapr)
Zapr provides a [logr.LogSink](https://pkg.go.dev/github.com/go-logr/logr#LogSink) implementation using [zap](https://pkg.go.dev/go.uber.org/zap). It includes optional flag registration, Prometheus metrics, and a standard library [*log.Logger](https://pkg.go.dev/log#Logger) adapter.
## Example
```go
addr := flag.String("http-address", ":8080", "HTTP server listen address.")
zaprObserver := zaprprom.NewObserver()
zaprOptions := zapr.RegisterFlags(flag.CommandLine, zapr.AllOptions(
zapr.WithObserver(zaprObserver),
zapr.WithLevel(2), // Override default logging level.
)...)
flag.Parse()
log, sink := zapr.NewLogger(zaprOptions...)
defer sink.Flush() // For most GOOS (linux and darwin), flushing to stderr is a no-op.
log.Info("Hello, zap logr with option flags!")
reg := prometheus.NewRegistry()
reg.MustRegister(
collectors.NewGoCollector(),
collectors.NewBuildInfoCollector(),
collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
zaprObserver, // Register Observer with Prometheus.
)
log.Info("Hello, zap logr Prometheus metrics!")
mux := http.NewServeMux()
mux.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
srv := http.Server{
Addr: *addr,
Handler: mux,
ErrorLog: zapr.NewStdErrorLogger(sink), // Adapt LogSink to stdlib *log.Logger.
}
if err := srv.ListenAndServe(); err != nil {
log.Error(err, "Failed to serve HTTP")
}
```