Files
gocryptotrader/logger/logger.go
Scott f8ef6da93d Logger: Add support for toggling sub logger name output for log events (#407)
* Adds new optional log field. Adds padding to the fields to make it have a consistent output

* Line space and correct err message

* Removes padding code

* Moves `ShowLogSystemName` to advanced settings

* Uppers the names. Prevents pointer crash. Adds to config_example.json

* Adds test scenario for nil and true ShowLogSystemName

* buffer reset
2020-01-03 14:12:23 +11:00

87 lines
1.9 KiB
Go

package logger
import (
"errors"
"fmt"
"io"
"time"
)
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")
}
e := eventPool.Get().(*LogEvent)
e.output = w
e.data = append(e.data, []byte(header)...)
if l.ShowLogSystemName {
e.data = append(e.data, l.Spacer...)
e.data = append(e.data, slName...)
}
e.data = append(e.data, l.Spacer...)
if l.Timestamp != "" {
e.data = time.Now().AppendFormat(e.data, l.Timestamp)
}
e.data = append(e.data, l.Spacer...)
e.data = append(e.data, []byte(data)...)
if data == "" || data[len(data)-1] != '\n' {
e.data = append(e.data, '\n')
}
_, err := e.output.Write(e.data)
e.data = e.data[:0]
eventPool.Put(e)
return err
}
// CloseLogger is called on shutdown of application
func CloseLogger() error {
err := GlobalLogFile.Close()
if err != nil {
return err
}
return nil
}
func validSubLogger(s string) (bool, *subLogger) {
if v, found := subLoggers[s]; found {
return true, v
}
return false, nil
}
// Level retries the current sublogger levels
func Level(s string) (*Levels, error) {
found, logger := validSubLogger(s)
if !found {
return nil, fmt.Errorf("logger %v not found", s)
}
return &logger.Levels, nil
}
// SetLevel sets sublogger levels
func SetLevel(s, level string) (*Levels, error) {
found, logger := validSubLogger(s)
if !found {
return nil, fmt.Errorf("logger %v not found", s)
}
logger.Levels = splitLevel(level)
return &logger.Levels, nil
}