An open API service indexing awesome lists of open source software.

https://github.com/atomicgo/chslog

♻️ Automatically change the underlying slog handler, based on the environment.
https://github.com/atomicgo/chslog

atomicgo go golang golang-library

Last synced: about 2 months ago
JSON representation

♻️ Automatically change the underlying slog handler, based on the environment.

Awesome Lists containing this project

README

        

AtomicGo | chslog


Downloads


Latest Release


Tests


Coverage


Unit test count


License: MIT



Go report

---


Documentation
|
Contributing
|
Code of Conduct

---


AtomicGo


go get atomicgo.dev/chslog



# chslog

```go
import "atomicgo.dev/chslog"
```

Package chslog provides a simple way to set up a logger that automatically chooses between a production and a development logger.

Example:

```
func main() {
// Uses a text logger in development and a JSON logger in production.
prodHandler := slog.NewJSONHandler(os.Stdout, nil)
devHandler := slog.NewTextHandler(os.Stdout, nil)

handler := slogch.Choose(prodHandler, devHandler)
logger := slog.New(handler)

logger.Info("Hello, World!", "foo", "bar")
// Prod: {"time":"2023-08-03T01:31:27.6681464+02:00","level":"INFO","msg":"Hello, World!","foo":"bar"}
// Dev: time=2023-08-03T01:30:23.438+02:00 level=INFO msg="Hello, World!" foo=bar
}
```

## Index

- [Variables](<#variables>)
- [func Choose\(prodHandler, devHandler slog.Handler\) slog.Handler](<#Choose>)

## Variables

Conditions holds the environment conditions that are checked. By default, it checks for the most common environments with https://atomicgo.dev/isprod. See https://pkg.go.dev/atomicgo.dev/isprod#Conditions for more info, on how to configure them \(if needed\).

```go
var Conditions = isprod.DefaultConditions
```


## func [Choose]()

```go
func Choose(prodHandler, devHandler slog.Handler) slog.Handler
```

Choose automatically chooses between prodHandler and devHandler.

Example

```go
package main

import (
slogch "atomicgo.dev/chslog"
"log/slog"
"os"
)

func main() {
// Uses a text logger in development and a JSON logger in production.
prodHandler := slog.NewJSONHandler(os.Stdout, nil)
devHandler := slog.NewTextHandler(os.Stdout, nil)

handler := slogch.Choose(prodHandler, devHandler)
logger := slog.New(handler)

logger.Info("Hello, World!", "foo", "bar")
}
```

Generated by [gomarkdoc]()

---

> [AtomicGo.dev](https://atomicgo.dev)  · 
> with ❤️ by [@MarvinJWendt](https://github.com/MarvinJWendt) |
> [MarvinJWendt.com](https://marvinjwendt.com)