Skip to content

Commit

Permalink
add SetupStdLogger to initialize std global logger with lgr
Browse files Browse the repository at this point in the history
  • Loading branch information
umputun committed Aug 13, 2020
1 parent e7fabd0 commit eff9fc5
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Expand Up @@ -88,8 +88,12 @@ _Note: formatter (predefined or custom) adds measurable overhead - the cost will

_`level` parameter is optional, if defined (non-empty) will enforce the level._

- `lgr.SetupStdLogger(opts ...Option)` initializes std global logger (`log.std`) with lgr logger and given options.
All standard methods like `log.Print`, `log.Println`, `log.Fatal` and so on will be forwarder to lgr.

### global logger

Users **should avoid** global logger and pass the concrete logger as a dependency. However, in some cases a global logger may be needed, for example migration from stdlib `log` to `lgr`. For such cases `log "github.com/go-pkgz/lgr"` can be imported instead of `log` package.

Global logger provides `lgr.Printf`, `lgr.Print` and `lgr.Fatalf` functions. User can customize the logger by calling `lgr.Setup(options ...)`. The instance of this logger can be retrieved with `lgr.Default()`

9 changes: 9 additions & 0 deletions adaptor.go
Expand Up @@ -29,3 +29,12 @@ func ToWriter(l L, level string) *Writer {
func ToStdLogger(l L, level string) *log.Logger {
return log.New(ToWriter(l, level), "", 0)
}

// SetupStdLogger makes the default std logger with lgr.L
func SetupStdLogger(opts ...Option) {
logOpts := append([]Option{CallerDepth(3)}, opts...) // skip 3 more frames to compensate stdlog calls
l := New(logOpts...)
log.SetOutput(ToWriter(l, ""))
log.SetPrefix("")
log.SetFlags(0)
}
16 changes: 16 additions & 0 deletions adaptor_test.go
Expand Up @@ -2,6 +2,7 @@ package lgr

import (
"bytes"
"log"
"testing"
"time"

Expand Down Expand Up @@ -53,3 +54,18 @@ func TestAdaptor_ToStdLogger(t *testing.T) {
wr.Printf("xxx %s", "yyy")
assert.Equal(t, "2018/01/07 13:02:34.000 WARN xxx yyy\n", rout.String())
}

func TestSetupStdLogger(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
SetupStdLogger(Out(rout), Err(rerr), Format(WithMsec))
log.Print("something\n")
assert.Contains(t, rout.String(), " INFO something\n")
rout.Reset()

log.Print("[WARN] something\n")
assert.Contains(t, rout.String(), " WARN something\n")
rout.Reset()

log.Print("[DEBUG] something\n")
assert.Empty(t, rout.String())
}

0 comments on commit eff9fc5

Please sign in to comment.