Skip to content

Commit

Permalink
pref: optimize the log write logic, add default handler
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed Nov 8, 2022
1 parent feba08f commit 6f145bd
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 168 deletions.
94 changes: 46 additions & 48 deletions logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ type Logger struct {
// log latest error
err error

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

Expand Down Expand Up @@ -281,20 +283,41 @@ 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.handlers = append(l.handlers, h) }
func (l *Logger) AddHandler(h Handler) { l.PushHandlers(h) }

// AddHandlers to the logger
func (l *Logger) AddHandlers(hs ...Handler) { l.handlers = append(l.handlers, hs...) }
func (l *Logger) AddHandlers(hs ...Handler) { l.PushHandlers(hs...) }

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

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

// PushHandler to the l. alias of AddHandler()
func (l *Logger) PushHandler(h Handler) { l.AddHandler(h) }
if len(hs) > 0 {
l.handlers = append(l.handlers, hs...)
}
}

// SetHandlers for the logger
func (l *Logger) SetHandlers(hs []Handler) { l.handlers = hs }
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
}

// AddProcessor to the logger
func (l *Logger) AddProcessor(p Processor) { l.processors = append(l.processors, p) }
Expand Down Expand Up @@ -355,6 +378,9 @@ func (l *Logger) WithTime(t time.Time) *Record {
return r.WithTime(t)
}

// WithCtx new record with context.Context
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()
Expand Down Expand Up @@ -385,69 +411,53 @@ func (l *Logger) logf(level Level, format string, args []any) {
}

// Log a message with level
func (l *Logger) Log(level Level, args ...any) {
l.log(level, args)
}
func (l *Logger) Log(level Level, args ...any) { l.log(level, args) }

// Logf a format message with level
func (l *Logger) Logf(level Level, format string, args ...any) {
l.logf(level, format, args)
}

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

// Println logs a message at level PrintLevel
func (l *Logger) Println(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)
}

// Warn logs a message at level Warn
func (l *Logger) Warn(args ...any) {
l.log(WarnLevel, args)
}
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)
}

// Warning logs a message at level Warn
func (l *Logger) Warning(args ...any) {
l.log(WarnLevel, args)
}
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)
}
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)
}

// Trace logs a message at level Trace
func (l *Logger) Trace(args ...any) {
l.log(TraceLevel, args)
}
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)
}

// Error logs a message at level error
func (l *Logger) Error(args ...any) {
l.log(ErrorLevel, args)
}
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) {
Expand All @@ -462,51 +472,39 @@ func (l *Logger) ErrorT(err error) {
}

// Notice logs a message at level Notice
func (l *Logger) Notice(args ...any) {
l.log(NoticeLevel, args)
}
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)
}

// Debug logs a message at level Debug
func (l *Logger) Debug(args ...any) {
l.log(DebugLevel, args)
}
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)
}

// Fatal logs a message at level Fatal
func (l *Logger) Fatal(args ...any) {
l.log(FatalLevel, args)
}
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)
}

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

// Panic logs a message at level Panic
func (l *Logger) Panic(args ...any) {
l.log(PanicLevel, args)
}
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)
}

// Panicln logs a message at level Panic
func (l *Logger) Panicln(args ...any) {
l.log(PanicLevel, args)
}
func (l *Logger) Panicln(args ...any) { l.log(PanicLevel, args) }
75 changes: 29 additions & 46 deletions record.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@ func (r *Record) Copy() *Record {
// ---------------------------------------------------------------------------
//

// SetCtx on record
func (r *Record) SetCtx(ctx context.Context) *Record { return r.SetContext(ctx) }

// SetContext on record
func (r *Record) SetContext(ctx context.Context) *Record {
r.Ctx = ctx
Expand Down Expand Up @@ -259,7 +262,7 @@ func (r *Record) SetFields(fields M) *Record {
//
// ---------------------------------------------------------------------------
// Add log message with builder
// TODO r.Builder(InfoLevel).Str().Int().Float().Msg()
// TODO r.Build(InfoLevel).Str().Int().Float().Msg()
// ---------------------------------------------------------------------------
//

Expand All @@ -269,12 +272,18 @@ func (r *Record) SetFields(fields M) *Record {
// return r
// }

// Object data on record TODO optimize performance
// func (r *Record) Any(v any) *Record {
// r.Data = ctx
// return r
// }

// func (r *Record) Str(message string) {
// r.logBytes(level, []byte(message))
// r.logWrite(level, []byte(message))
// }

// func (r *Record) Int(val int) {
// r.logBytes(level, []byte(message))
// r.logWrite(level, []byte(message))
// }

//
Expand All @@ -287,123 +296,97 @@ func (r *Record) log(level Level, args []any) {
// will reduce memory allocation once
// r.Message = strutil.Byte2str(formatArgsWithSpaces(args))
r.Message = formatArgsWithSpaces(args)
r.logBytes(level)
r.logWrite(level)
}

func (r *Record) logf(level Level, format string, args []any) {
r.Message = fmt.Sprintf(format, args...)
r.logBytes(level)
r.logWrite(level)
}

// Log a message with level
func (r *Record) Log(level Level, args ...any) {
r.log(level, args)
}
func (r *Record) Log(level Level, args ...any) { r.log(level, args) }

// Logf a message with level
func (r *Record) Logf(level Level, format string, args ...any) {
r.logf(level, format, args)
}

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

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

// Trace logs a message at level Trace
func (r *Record) Trace(args ...any) {
r.log(TraceLevel, args)
}
func (r *Record) Trace(args ...any) { r.log(TraceLevel, args) }

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

// Error logs a message at level Error
func (r *Record) Error(args ...any) {
r.log(ErrorLevel, args)
}
func (r *Record) Error(args ...any) { r.log(ErrorLevel, args) }

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

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

// Warnf logs a message at level Warn
func (r *Record) Warnf(format string, args ...any) {
r.logf(ErrorLevel, format, args)
}

// Notice logs a message at level Notice
func (r *Record) Notice(args ...any) {
r.log(NoticeLevel, args)
}
func (r *Record) Notice(args ...any) { r.log(NoticeLevel, args) }

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

// Debug logs a message at level Debug
func (r *Record) Debug(args ...any) {
r.log(DebugLevel, args)
}
func (r *Record) Debug(args ...any) { r.log(DebugLevel, args) }

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

// Print logs a message at level Print
func (r *Record) Print(args ...any) {
r.log(PrintLevel, args)
}
func (r *Record) Print(args ...any) { r.log(PrintLevel, args) }

// Println logs a message at level Print, will not append \n. alias of Print
func (r *Record) Println(args ...any) {
r.log(PrintLevel, args)
}
func (r *Record) Println(args ...any) { r.log(PrintLevel, args) }

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

// Fatal logs a message at level Fatal
func (r *Record) Fatal(args ...any) {
r.log(FatalLevel, args)
}
func (r *Record) Fatal(args ...any) { r.log(FatalLevel, args) }

// Fatalln logs a message at level Fatal, will not append \n.
func (r *Record) Fatalln(args ...any) {
r.log(FatalLevel, args)
}
// Fatalln logs a message at level Fatal
func (r *Record) Fatalln(args ...any) { r.log(FatalLevel, args) }

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

// Panic logs a message at level Panic
func (r *Record) Panic(args ...any) {
r.log(PanicLevel, args)
}
func (r *Record) Panic(args ...any) { r.log(PanicLevel, args) }

// Panicln logs a message at level Panic, will not append \n.
func (r *Record) Panicln(args ...any) {
r.log(PanicLevel, args)
}
// Panicln logs a message at level Panic
func (r *Record) Panicln(args ...any) { r.log(PanicLevel, args) }

// Panicf logs a message at level Panic
func (r *Record) Panicf(format string, args ...any) {
Expand Down

0 comments on commit 6f145bd

Please sign in to comment.