https://github.com/atomicgo/splitslog
䷖ Slog handler that maps different handlers to different log levels
https://github.com/atomicgo/splitslog
atomicgo go golang golang-library
Last synced: about 2 months ago
JSON representation
䷖ Slog handler that maps different handlers to different log levels
- Host: GitHub
- URL: https://github.com/atomicgo/splitslog
- Owner: atomicgo
- License: mit
- Created: 2023-09-07T13:32:03.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-08T17:04:38.000Z (11 months ago)
- Last Synced: 2024-11-17T02:18:40.924Z (7 months ago)
- Topics: atomicgo, go, golang, golang-library
- Language: Go
- Homepage: https://atomicgo.dev
- Size: 36.1 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
AtomicGo | splitslog
---
Documentation
|
Contributing
|
Code of Conduct---
![]()
go get atomicgo.dev/splitslog
# splitslog
```go
import "atomicgo.dev/splitslog"
```Package splitslog provides a handler that splits log records to different handlers based on their level.
The most common use case is to split logs to stdout and stderr based on their level.
```go
package mainimport (
"log/slog"
"os""atomicgo.dev/splitslog"
)func main() {
splitter := splitslog.Splitter{
// Debug and info messages are printed to stdout.
slog.LevelDebug: slog.NewJSONHandler(os.Stdout, nil),
slog.LevelInfo: slog.NewJSONHandler(os.Stdout, nil),// Warn and error messages are printed to stderr.
slog.LevelWarn: slog.NewJSONHandler(os.Stderr, nil),
slog.LevelError: slog.NewJSONHandler(os.Stderr, nil),
}handler := splitslog.NewSplitHandler(splitter)
logger := slog.New(handler)logger.Info("info message prints to stdout")
logger.Error("error message prints to stderr")// stdout: {"time":"2023-09-07T16:56:22.563817+02:00","level":"INFO","msg":"info message prints to stdout"}
// stderr: {"time":"2023-09-07T16:56:22.564103+02:00","level":"ERROR","msg":"error message prints to stderr"}
}
```## Index
- [type SplitHandler](<#SplitHandler>)
- [func NewSplitHandler\(splitter Splitter\) \*SplitHandler](<#NewSplitHandler>)
- [func \(h \*SplitHandler\) Enabled\(ctx context.Context, level slog.Level\) bool](<#SplitHandler.Enabled>)
- [func \(h \*SplitHandler\) Handle\(ctx context.Context, record slog.Record\) error](<#SplitHandler.Handle>)
- [func \(h \*SplitHandler\) WithAttrs\(attrs \[\]slog.Attr\) slog.Handler](<#SplitHandler.WithAttrs>)
- [func \(h \*SplitHandler\) WithGroup\(name string\) slog.Handler](<#SplitHandler.WithGroup>)
- [type Splitter](<#Splitter>)SplitHandler is a handler that splits log records to different handlers based on their level.
```go
type SplitHandler struct {
Splitter Splitter
// contains filtered or unexported fields
}
``````go
func NewSplitHandler(splitter Splitter) *SplitHandler
```NewSplitHandler returns a new SplitHandler.
```go
package mainimport (
"log/slog"
"os""atomicgo.dev/splitslog"
)func main() {
splitter := splitslog.Splitter{
// Debug and info messages are printed to stdout.
slog.LevelDebug: slog.NewJSONHandler(os.Stdout, nil),
slog.LevelInfo: slog.NewJSONHandler(os.Stdout, nil),// Warn and error messages are printed to stderr.
slog.LevelWarn: slog.NewJSONHandler(os.Stderr, nil),
slog.LevelError: slog.NewJSONHandler(os.Stderr, nil),
}handler := splitslog.NewSplitHandler(splitter)
logger := slog.New(handler)logger.Info("info message prints to stdout")
logger.Error("error message prints to stderr")// stdout: {"time":"2023-09-07T16:56:22.563817+02:00","level":"INFO","msg":"info message prints to stdout"}
// stderr: {"time":"2023-09-07T16:56:22.564103+02:00","level":"ERROR","msg":"error message prints to stderr"}
}
```
### func \(\*SplitHandler\) [Enabled]()```go
func (h *SplitHandler) Enabled(ctx context.Context, level slog.Level) bool
```Enabled implements Handler.Enabled.
### func \(\*SplitHandler\) [Handle]()```go
func (h *SplitHandler) Handle(ctx context.Context, record slog.Record) error
```Handle implements Handler.Handle.
### func \(\*SplitHandler\) [WithAttrs]()```go
func (h *SplitHandler) WithAttrs(attrs []slog.Attr) slog.Handler
```WithAttrs implements Handler.WithAttrs.
### func \(\*SplitHandler\) [WithGroup]()```go
func (h *SplitHandler) WithGroup(name string) slog.Handler
```WithGroup implements Handler.WithGroup.
Splitter is a map of log levels to handlers. The default log levels \(slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError\) must be present, otherwise the SplitHandler panics.
```go
type Splitter map[slog.Level]slog.Handler
```Generated by [gomarkdoc]()
---
> [AtomicGo.dev](https://atomicgo.dev) ·
> with ❤️ by [@MarvinJWendt](https://github.com/MarvinJWendt) |
> [MarvinJWendt.com](https://marvinjwendt.com)