From b4c24b52c5cc6cec06a2acdd0eb146c09ff01a0e Mon Sep 17 00:00:00 2001 From: rjbasitali Date: Wed, 11 May 2022 15:52:05 +0500 Subject: [PATCH] err writer --- logger_begin.go | 2 +- logger_level.go | 2 +- logger_prefix.go | 2 +- my_logger.go | 63 +++++++++++++++++++++++++++++++++--------------- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/logger_begin.go b/logger_begin.go index 9636439..95f22c1 100644 --- a/logger_begin.go +++ b/logger_begin.go @@ -6,6 +6,6 @@ func (l myLogger) Begin(s ...interface{}) Logger { if hasLevel(l.level, logFlag) { l.log(logFlag, append([]interface{}{"BEGIN"}, s...)...) } - logger := myLogger{Writer: l.Writer, prefix: l.prefix, begin: time.Now(), level: l.level} + logger := myLogger{Writer: l.Writer, ErrWriter: l.ErrWriter, prefix: l.prefix, begin: time.Now(), level: l.level} return logger } diff --git a/logger_level.go b/logger_level.go index c1e844e..4474a13 100644 --- a/logger_level.go +++ b/logger_level.go @@ -20,7 +20,7 @@ const ( // Anything above 6 as level will be considered Level 6. // Pass 0 to output no logs. func (l myLogger) Level(level uint8) Logger { - logger := myLogger{Writer: l.Writer, prefix: l.prefix, begin: l.begin} + logger := myLogger{Writer: l.Writer, ErrWriter: l.ErrWriter, prefix: l.prefix, begin: l.begin} switch level { case 1: logger.level = alertFlag diff --git a/logger_prefix.go b/logger_prefix.go index ef68ee7..e2d0426 100644 --- a/logger_prefix.go +++ b/logger_prefix.go @@ -11,6 +11,6 @@ func (l myLogger) Prefix(p ...string) Logger { for _, prefix := range p { buffer.WriteString(fmt.Sprintf("%s: ", prefix)) } - logger := myLogger{Writer: l.Writer, prefix: buffer.String()} + logger := myLogger{Writer: l.Writer, ErrWriter: l.ErrWriter, prefix: buffer.String()} return logger } diff --git a/my_logger.go b/my_logger.go index 9110b4a..9fed251 100644 --- a/my_logger.go +++ b/my_logger.go @@ -16,11 +16,12 @@ var ( type Fields map[string]interface{} type myLogger struct { - Writer io.Writer - prefix string - begin time.Time - level uint8 - data Fields + Writer io.Writer + ErrWriter io.Writer + prefix string + begin time.Time + level uint8 + data Fields } func logPrefix(level uint8) string { @@ -43,21 +44,41 @@ func (fields Fields) String() string { return buffer.String() } -func (l myLogger) log(level uint8, s ...interface{}) { - if l.Writer == nil { - return +func (l myLogger) log(flag uint8, s ...interface{}) { + var w io.Writer + { + if flag != errorFlag && l.Writer == nil { + return + } else { + w = l.Writer + } + if flag == errorFlag && l.ErrWriter == nil { + return + } else { + w = l.ErrWriter + } } - f := fmt.Sprintf("%s%s msg=%q%s", logPrefix(level), l.prefix, fmt.Sprint(s...), l.data) - fmt.Fprintln(l.Writer, f) + f := fmt.Sprintf("%s%s msg=%q%s", logPrefix(flag), l.prefix, fmt.Sprint(s...), l.data) + fmt.Fprintln(w, f) } -func (l myLogger) logf(level uint8, format string, s ...interface{}) { - if l.Writer == nil { - return +func (l myLogger) logf(flag uint8, format string, s ...interface{}) { + var w io.Writer + { + if flag != errorFlag && l.Writer == nil { + return + } else { + w = l.Writer + } + if flag == errorFlag && l.ErrWriter == nil { + return + } else { + w = l.ErrWriter + } } format = fmt.Sprintf("%%s%%s msg=\"%s\"%s\n", format, l.data) - s = append([]interface{}{logPrefix(level), l.prefix}, s...) - fmt.Fprintf(l.Writer, format, s...) + s = append([]interface{}{logPrefix(flag), l.prefix}, s...) + fmt.Fprintf(w, format, s...) } func funcName() string { @@ -77,13 +98,17 @@ func funcName() string { return "" } -func NewLogger(w io.Writer) Logger { +func NewLogger(w, errw io.Writer) Logger { if w == nil { w = os.Stdout } + if errw == nil { + errw = os.Stderr + } return myLogger{ - Writer: w, - begin: time.Now(), - level: traceFlag, + Writer: w, + ErrWriter: errw, + begin: time.Now(), + level: traceFlag, } }