Skip to content

Commit

Permalink
✨ feat: support set default channel name on each logger. issues #108
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed Jul 2, 2023
1 parent 4321da1 commit ccc8922
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 43 deletions.
36 changes: 2 additions & 34 deletions common.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ var (
PanicLevel: "PANIC",
FatalLevel: "FATAL",
ErrorLevel: "ERROR",
WarnLevel: "WARN",
NoticeLevel: "NOTICE",
WarnLevel: "WARNING",
InfoLevel: "INFO",
DebugLevel: "DEBUG",
TraceLevel: "TRACE",
Expand Down Expand Up @@ -248,7 +248,7 @@ func Name2Level(ln string) (Level, error) {
return ErrorLevel, nil
case "warn", "warning":
return WarnLevel, nil
case "notice":
case "note", "notice":
return NoticeLevel, nil
case "info", "": // make the zero value useful
return InfoLevel, nil
Expand Down Expand Up @@ -302,35 +302,3 @@ func ResetExitHandlers(applyToStd bool) {
std.ResetExitHandlers()
}
}

func (l *Logger) runExitHandlers() {
defer func() {
if err := recover(); err != nil {
printlnStderr("slog: run exit handler error:", err)
}
}()

for _, handler := range l.exitHandlers {
handler()
}
}

// RegisterExitHandler register an exit-handler on global exitHandlers
func (l *Logger) RegisterExitHandler(handler func()) {
l.exitHandlers = append(l.exitHandlers, handler)
}

// PrependExitHandler prepend register an exit-handler on global exitHandlers
func (l *Logger) PrependExitHandler(handler func()) {
l.exitHandlers = append([]func(){handler}, l.exitHandlers...)
}

// ResetExitHandlers reset logger exitHandlers
func (l *Logger) ResetExitHandlers() {
l.exitHandlers = make([]func(), 0)
}

// ExitHandlers get all exitHandlers of the logger
func (l *Logger) ExitHandlers() []func() {
return l.exitHandlers
}
2 changes: 1 addition & 1 deletion formatter_text.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type TextFormatter struct {
// eg: ["level", "}}"}
fields []string

// TimeFormat the time format layout. default is time.RFC3339
// TimeFormat the time format layout. default is DefaultTimeFormat
TimeFormat string
// Enable color on print log to terminal
EnableColor bool
Expand Down
31 changes: 31 additions & 0 deletions issues_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"testing"
"time"

"github.com/gookit/goutil/byteutil"
"github.com/gookit/goutil/testutil/assert"
"github.com/gookit/slog"
"github.com/gookit/slog/handler"
)
Expand Down Expand Up @@ -92,3 +94,32 @@ func TestIssues_105(t *testing.T) {
wg.Wait()
})
}

// https://github.com/gookit/slog/issues/108
func TestIssues_108(t *testing.T) {
buf1 := byteutil.NewBuffer()
root := slog.NewWithName("root", func(l *slog.Logger) {
l.ChannelName = l.Name()
l.AddHandler(handler.NewSimple(buf1, slog.InfoLevel))
})
root.Info("root info message")
root.Warn("root warn message")

str := buf1.ResetGet()
fmt.Println(str)
assert.StrContains(t, str, "[root] [INFO")
assert.StrContains(t, str, "[root] [WARN")

buf2 := byteutil.NewBuffer()
probe := slog.NewWithName("probe", func(l *slog.Logger) {
l.ChannelName = l.Name()
l.AddHandler(handler.NewSimple(buf2, slog.InfoLevel))
})
probe.Info("probe info message")
probe.Warn("probe warn message")

str = buf2.ResetGet()
fmt.Println(str)
assert.StrContains(t, str, "[probe] [INFO")
assert.StrContains(t, str, "[probe] [WARN")
}
55 changes: 48 additions & 7 deletions logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ type Logger struct {
// logger options
//

// ChannelName log channel name, default is DefaultChannelName
ChannelName string
// LowerLevelName use lower level name
LowerLevelName bool
// ReportCaller on write log record
Expand Down Expand Up @@ -70,6 +72,7 @@ func NewWithName(name string, fns ...LoggerFn) *Logger {
PanicFunc: DefaultPanicFn,
exitHandlers: []func(){},
// options
ChannelName: DefaultChannelName,
ReportCaller: true,
CallerSkip: 6,
TimeClock: DefaultClockFn,
Expand Down Expand Up @@ -99,12 +102,10 @@ func (l *Logger) releaseRecord(r *Record) {

//
// ---------------------------------------------------------------------------
// Management logger
// Configure logger
// ---------------------------------------------------------------------------
//

const flushInterval = 30 * time.Second

// Config current logger
func (l *Logger) Config(fns ...LoggerFn) *Logger {
for _, fn := range fns {
Expand All @@ -118,6 +119,40 @@ func (l *Logger) Config(fns ...LoggerFn) *Logger {
// Deprecated: use Config()
func (l *Logger) Configure(fn LoggerFn) *Logger { return l.Config(fn) }

// RegisterExitHandler register an exit-handler on global exitHandlers
func (l *Logger) RegisterExitHandler(handler func()) {
l.exitHandlers = append(l.exitHandlers, handler)
}

// PrependExitHandler prepend register an exit-handler on global exitHandlers
func (l *Logger) PrependExitHandler(handler func()) {
l.exitHandlers = append([]func(){handler}, l.exitHandlers...)
}

// ResetExitHandlers reset logger exitHandlers
func (l *Logger) ResetExitHandlers() {
l.exitHandlers = make([]func(), 0)
}

// ExitHandlers get all exitHandlers of the logger
func (l *Logger) ExitHandlers() []func() {
return l.exitHandlers
}

// SetName for logger
func (l *Logger) SetName(name string) { l.name = name }

// Name of the logger
func (l *Logger) Name() string { return l.name }

//
// ---------------------------------------------------------------------------
// Management logger
// ---------------------------------------------------------------------------
//

const flushInterval = 30 * time.Second

// FlushDaemon run flush handle on daemon
//
// Usage:
Expand Down Expand Up @@ -243,11 +278,17 @@ func (l *Logger) Exit(code int) {
}
}

// SetName for logger
func (l *Logger) SetName(name string) { l.name = name }
func (l *Logger) runExitHandlers() {
defer func() {
if err := recover(); err != nil {
printlnStderr("slog: run exit handler error:", err)
}
}()

// Name of the logger
func (l *Logger) Name() string { return l.name }
for _, handler := range l.exitHandlers {
handler()
}
}

// DoNothingOnPanicFatal do nothing on panic or fatal level.
// useful on testing.
Expand Down
4 changes: 3 additions & 1 deletion record.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"runtime"
"strconv"
"time"

"github.com/gookit/goutil/strutil"
)

// Record a log record definition
Expand Down Expand Up @@ -58,7 +60,7 @@ type Record struct {
func newRecord(logger *Logger) *Record {
return &Record{
logger: logger,
Channel: DefaultChannelName,
Channel: strutil.OrElse(logger.ChannelName, DefaultChannelName),
// with some options
CallerFlag: logger.CallerFlag,
CallerSkip: logger.CallerSkip,
Expand Down

0 comments on commit ccc8922

Please sign in to comment.