mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-16 15:09:57 +00:00
* log: fix bugs expand coverage and optimise * log: fix linter issues * log: fix linter issue and pack methods in same file * log: drop defer * logger: move global check inside getfields and remove unused test function * logger: Increase note thanks @gloriouscode * logger: wrap error with writer type * logger: change variable name * logger: change variable names and remove validsublogger func as it doesn't add functionality over a standard map call * logs: error when unsupported output is applied on setup calls * logs: add glorious suggestion * logger: add protection to reduce olympic gold medal races * logger: fix linter issues * log: glorious niterinos
85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package log
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
errEmptyLoggerName = errors.New("cannot have empty logger name")
|
|
errSubLoggerAlreadyregistered = errors.New("sub logger already registered")
|
|
)
|
|
|
|
func newLogger(c *Config) Logger {
|
|
return Logger{
|
|
Timestamp: c.AdvancedSettings.TimeStampFormat,
|
|
Spacer: c.AdvancedSettings.Spacer,
|
|
ErrorHeader: c.AdvancedSettings.Headers.Error,
|
|
InfoHeader: c.AdvancedSettings.Headers.Info,
|
|
WarnHeader: c.AdvancedSettings.Headers.Warn,
|
|
DebugHeader: c.AdvancedSettings.Headers.Debug,
|
|
ShowLogSystemName: *c.AdvancedSettings.ShowLogSystemName,
|
|
}
|
|
}
|
|
|
|
func (l *Logger) newLogEvent(data, header, slName string, w io.Writer) error {
|
|
if w == nil {
|
|
return errors.New("io.Writer not set")
|
|
}
|
|
|
|
pool, ok := eventPool.Get().(*[]byte)
|
|
if !ok {
|
|
return errors.New("unable to type assert slice of bytes pointer")
|
|
}
|
|
|
|
*pool = append(*pool, header...)
|
|
if l.ShowLogSystemName {
|
|
*pool = append(*pool, l.Spacer...)
|
|
*pool = append(*pool, slName...)
|
|
}
|
|
*pool = append(*pool, l.Spacer...)
|
|
if l.Timestamp != "" {
|
|
*pool = time.Now().AppendFormat(*pool, l.Timestamp)
|
|
}
|
|
*pool = append(*pool, l.Spacer...)
|
|
*pool = append(*pool, data...)
|
|
if data == "" || data[len(data)-1] != '\n' {
|
|
*pool = append(*pool, '\n')
|
|
}
|
|
_, err := w.Write(*pool)
|
|
*pool = (*pool)[:0]
|
|
eventPool.Put(pool)
|
|
|
|
return err
|
|
}
|
|
|
|
// CloseLogger is called on shutdown of application
|
|
func CloseLogger() error {
|
|
return GlobalLogFile.Close()
|
|
}
|
|
|
|
// Level retries the current sublogger levels
|
|
func Level(name string) (Levels, error) {
|
|
RWM.RLock()
|
|
defer RWM.RUnlock()
|
|
subLogger, found := SubLoggers[name]
|
|
if !found {
|
|
return Levels{}, fmt.Errorf("logger %s not found", name)
|
|
}
|
|
return subLogger.levels, nil
|
|
}
|
|
|
|
// SetLevel sets sublogger levels
|
|
func SetLevel(s, level string) (Levels, error) {
|
|
RWM.Lock()
|
|
defer RWM.Unlock()
|
|
subLogger, found := SubLoggers[s]
|
|
if !found {
|
|
return Levels{}, fmt.Errorf("sub logger %v not found", s)
|
|
}
|
|
subLogger.SetLevels(splitLevel(level))
|
|
return subLogger.levels, nil
|
|
}
|