Skip to content

Commit

Permalink
👔 up: update logger handler, remove defaultH setting.
Browse files Browse the repository at this point in the history
- update logger new logic, can be with config funcs
  • Loading branch information
inhere committed Dec 30, 2022
1 parent 4799e4b commit d671f33
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 107 deletions.
120 changes: 37 additions & 83 deletions logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ type SLogger interface {
Logf(level Level, format string, v ...any)
}

// LoggerFn func
type LoggerFn func(l *Logger)

// Logger log dispatcher definition.
//
// The logger implements the `github.com/gookit/gsr.Logger`
Expand All @@ -26,8 +29,7 @@ type Logger struct {
// log latest error
err error

// default handler for logger
defaultH Handler
// log handlers for logger
handlers []Handler
processors []Processor

Expand Down Expand Up @@ -59,20 +61,20 @@ func New() *Logger {
return NewWithName("logger")
}

// NewWithConfig create a new logger with config func
func NewWithConfig(fn func(l *Logger)) *Logger {
return NewWithName("logger").Configure(fn)
}

// NewWithHandlers create a new logger with handlers
func NewWithHandlers(hs ...Handler) *Logger {
logger := NewWithName("logger")
logger.AddHandlers(hs...)
return logger
}

// NewWithConfig create a new logger with config func
func NewWithConfig(fns ...LoggerFn) *Logger {
return NewWithName("logger", fns...)
}

// NewWithName create a new logger with name
func NewWithName(name string) *Logger {
func NewWithName(name string, fns ...LoggerFn) *Logger {
logger := &Logger{
name: name,
// exit handle
Expand All @@ -88,7 +90,7 @@ func NewWithName(name string) *Logger {
logger.recordPool.New = func() interface{} {
return newRecord(logger)
}
return logger
return logger.Config(fns...)
}

// NewRecord get new logger record
Expand All @@ -115,18 +117,15 @@ func (l *Logger) releaseRecord(r *Record) {
const flushInterval = 30 * time.Second

// Config current logger
func (l *Logger) Config(fns ...func(l *Logger)) *Logger {
func (l *Logger) Config(fns ...LoggerFn) *Logger {
for _, fn := range fns {
fn(l)
}
return l
}

// Configure current logger
func (l *Logger) Configure(fn func(l *Logger)) *Logger {
fn(l)
return l
}
func (l *Logger) Configure(fn LoggerFn) *Logger { return l.Config(fn) }

// FlushDaemon run flush handle on daemon
//
Expand Down Expand Up @@ -219,12 +218,6 @@ func (l *Logger) Close() error {

// VisitAll logger handlers
func (l *Logger) VisitAll(fn func(handler Handler) error) error {
if l.defaultH != nil {
if err := fn(l.defaultH); err != nil {
return err
}
}

for _, handler := range l.handlers {
// you can return nil for ignore error
if err := fn(handler); err != nil {
Expand Down Expand Up @@ -289,9 +282,6 @@ func (l *Logger) LastErr() error {
// ---------------------------------------------------------------------------
//

// SetDefault handler to the logger
func (l *Logger) SetDefault(h Handler) { l.defaultH = h }

// AddHandler to the logger
func (l *Logger) AddHandler(h Handler) { l.PushHandlers(h) }

Expand All @@ -303,25 +293,13 @@ func (l *Logger) PushHandler(h Handler) { l.PushHandlers(h) }

// PushHandlers to the logger
func (l *Logger) PushHandlers(hs ...Handler) {
// if not set default, use first handler
if l.defaultH == nil {
l.SetDefault(hs[0])
hs = hs[1:]
}

if len(hs) > 0 {
l.handlers = append(l.handlers, hs...)
}
}

// SetHandlers for the logger
func (l *Logger) SetHandlers(hs []Handler) {
// if not set default, use first handler
if l.defaultH == nil {
l.SetDefault(hs[0])
hs = hs[1:]
}

l.handlers = hs
}

Expand All @@ -347,39 +325,34 @@ func (l *Logger) SetProcessors(ps []Processor) { l.processors = ps }
// Record return a new record for log
func (l *Logger) Record() *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r
}

// WithField new record with field
func (l *Logger) WithField(name string, value any) *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r.WithField(name, value)
}

// WithFields new record with fields
func (l *Logger) WithFields(fields M) *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r.WithFields(fields)
}

// WithData new record with data
func (l *Logger) WithData(data M) *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r.WithData(data)
}

// WithTime new record with time.Time
func (l *Logger) WithTime(t time.Time) *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r.WithTime(t)
}
Expand All @@ -390,7 +363,6 @@ func (l *Logger) WithCtx(ctx context.Context) *Record { return l.WithContext(ctx
// WithContext new record with context.Context
func (l *Logger) WithContext(ctx context.Context) *Record {
r := l.newRecord()

defer l.releaseRecord(r)
return r.WithContext(ctx)
}
Expand Down Expand Up @@ -431,86 +403,68 @@ func (l *Logger) Print(args ...any) { l.log(PrintLevel, args) }
func (l *Logger) Println(args ...any) { l.log(PrintLevel, args) }

// Printf logs a message at level PrintLevel
func (l *Logger) Printf(format string, args ...any) {
l.logf(PrintLevel, format, args)
}
func (l *Logger) Printf(format string, args ...any) { l.logf(PrintLevel, format, args) }

// Warn logs a message at level Warn
func (l *Logger) Warn(args ...any) { l.log(WarnLevel, args) }

// Warnf logs a message at level Warn
func (l *Logger) Warnf(format string, args ...any) {
l.logf(WarnLevel, format, args)
}
func (l *Logger) Warnf(format string, args ...any) { l.logf(WarnLevel, format, args) }

// Warning logs a message at level Warn
// Warning logs a message at level Warn, alias of Logger.Warn()
func (l *Logger) Warning(args ...any) { l.log(WarnLevel, args) }

// Info logs a message at level Info
func (l *Logger) Info(args ...any) { l.log(InfoLevel, args) }

// Infof logs a message at level Info
func (l *Logger) Infof(format string, args ...any) {
l.logf(InfoLevel, format, args)
}
func (l *Logger) Infof(format string, args ...any) { l.logf(InfoLevel, format, args) }

// Trace logs a message at level Trace
// Trace logs a message at level trace
func (l *Logger) Trace(args ...any) { l.log(TraceLevel, args) }

// Tracef logs a message at level Trace
func (l *Logger) Tracef(format string, args ...any) {
l.logf(TraceLevel, format, args)
}
// Tracef logs a message at level trace
func (l *Logger) Tracef(format string, args ...any) { l.logf(TraceLevel, format, args) }

// Error logs a message at level error
func (l *Logger) Error(args ...any) { l.log(ErrorLevel, args) }

// Errorf logs a message at level Error
func (l *Logger) Errorf(format string, args ...any) {
l.logf(ErrorLevel, format, args)
}
// Errorf logs a message at level error
func (l *Logger) Errorf(format string, args ...any) { l.logf(ErrorLevel, format, args) }

// ErrorT logs a error type at level Error
// ErrorT logs a error type at level error
func (l *Logger) ErrorT(err error) {
if err != nil {
l.log(ErrorLevel, []any{err})
}
}

// Notice logs a message at level Notice
// Notice logs a message at level notice
func (l *Logger) Notice(args ...any) { l.log(NoticeLevel, args) }

// Noticef logs a message at level Notice
func (l *Logger) Noticef(format string, args ...any) {
l.logf(NoticeLevel, format, args)
}
// Noticef logs a message at level notice
func (l *Logger) Noticef(format string, args ...any) { l.logf(NoticeLevel, format, args) }

// Debug logs a message at level Debug
// Debug logs a message at level debug
func (l *Logger) Debug(args ...any) { l.log(DebugLevel, args) }

// Debugf logs a message at level Debug
func (l *Logger) Debugf(format string, args ...any) {
l.logf(DebugLevel, format, args)
}
// Debugf logs a message at level debug
func (l *Logger) Debugf(format string, args ...any) { l.logf(DebugLevel, format, args) }

// Fatal logs a message at level Fatal
// Fatal logs a message at level fatal
func (l *Logger) Fatal(args ...any) { l.log(FatalLevel, args) }

// Fatalf logs a message at level Fatal
func (l *Logger) Fatalf(format string, args ...any) {
l.logf(FatalLevel, format, args)
}
// Fatalf logs a message at level fatal
func (l *Logger) Fatalf(format string, args ...any) { l.logf(FatalLevel, format, args) }

// Fatalln logs a message at level Fatal
// Fatalln logs a message at level fatal
func (l *Logger) Fatalln(args ...any) { l.log(FatalLevel, args) }

// Panic logs a message at level Panic
// Panic logs a message at level panic
func (l *Logger) Panic(args ...any) { l.log(PanicLevel, args) }

// Panicf logs a message at level Panic
func (l *Logger) Panicf(format string, args ...any) {
l.logf(PanicLevel, format, args)
}
// Panicf logs a message at level panic
func (l *Logger) Panicf(format string, args ...any) { l.logf(PanicLevel, format, args) }

// Panicln logs a message at level Panic
// Panicln logs a message at level panic
func (l *Logger) Panicln(args ...any) { l.log(PanicLevel, args) }
28 changes: 16 additions & 12 deletions sugared.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import (
"github.com/gookit/color"
)

// SugaredLoggerFn func type.
type SugaredLoggerFn func(sl *SugaredLogger)

// SugaredLogger definition.
// Is a fast and usable Logger, which already contains
// the default formatting and handling capabilities
Expand All @@ -22,7 +25,7 @@ type SugaredLogger struct {

// NewStdLogger instance
func NewStdLogger() *SugaredLogger {
return NewSugaredLogger(os.Stdout, DebugLevel).Config(func(sl *SugaredLogger) {
return NewSugaredLogger(os.Stdout, DebugLevel, func(sl *SugaredLogger) {
sl.SetName("stdLogger")
// sl.CallerSkip += 1
sl.ReportCaller = true
Expand All @@ -32,7 +35,7 @@ func NewStdLogger() *SugaredLogger {
}

// NewSugaredLogger create new SugaredLogger
func NewSugaredLogger(output io.Writer, level Level) *SugaredLogger {
func NewSugaredLogger(output io.Writer, level Level, fns ...SugaredLoggerFn) *SugaredLogger {
sl := &SugaredLogger{
Level: level,
Output: output,
Expand All @@ -42,30 +45,31 @@ func NewSugaredLogger(output io.Writer, level Level) *SugaredLogger {
}

// NOTICE: use self as an log handler
sl.SetDefault(sl)
sl.AddHandler(sl)

return sl
return sl.Config(fns...)
}

// NewJSONSugared create new SugaredLogger with JSONFormatter
func NewJSONSugared(out io.Writer, level Level) *SugaredLogger {
func NewJSONSugared(out io.Writer, level Level, fns ...SugaredLoggerFn) *SugaredLogger {
sl := NewSugaredLogger(out, level)
sl.Formatter = NewJSONFormatter()

return sl
return sl.Config(fns...)
}

// Config current logger
func (sl *SugaredLogger) Config(fn func(sl *SugaredLogger)) *SugaredLogger {
fn(sl)
func (sl *SugaredLogger) Config(fns ...SugaredLoggerFn) *SugaredLogger {
for _, fn := range fns {
fn(sl)
}
return sl
}

// Configure current logger
func (sl *SugaredLogger) Configure(fn func(sl *SugaredLogger)) *SugaredLogger {
fn(sl)
return sl
}
//
// Deprecated: please use SugaredLogger.Config()
func (sl *SugaredLogger) Configure(fn SugaredLoggerFn) *SugaredLogger { return sl.Config(fn) }

// Reset the logger
func (sl *SugaredLogger) Reset() {
Expand Down
12 changes: 0 additions & 12 deletions write.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,18 +61,6 @@ func (l *Logger) writeRecord(level Level, r *Record) {

// do write log message
var inited bool
if l.defaultH != nil && l.defaultH.IsHandling(level) {
if !inited {
r.Init(l.LowerLevelName)
r.beforeHandle(l)
inited = true
}

if err := l.defaultH.Handle(r); err != nil {
printlnStderr("slog: failed to handle log, error: ", err)
}
}

for _, handler := range l.handlers {
if handler.IsHandling(level) {
if !inited {
Expand Down

0 comments on commit d671f33

Please sign in to comment.