Files
gocryptotrader/logger/logger.go
Andrew 3de1d94e5f New logging system (#319)
* First pass at adding new logging system

* NewLogger

* NewLogger

* WIP

* silly bug fix

* :D removed files

* removed old logging interface

* added tests

* added tests

* Started to add new lines to all f calls

* Added subsystem log types

* Logger improvements

* Further performance improvements

* changes to logger and sublogger creation

* Renamed Logging types

* removed old print statement

* changes based on feedback

* moved sublogger types to own file

* :)

* added console as output type

* added get level command

* added get/set log level via grpc command

* added check for output being empty for migration support

* first pass at log rotation

* added log rotation

* :D derp fixed

* added tests

* changes based on feedback

* changed log type

* comments

* renamed file -> fileSettings

* typo fix

* changes based on feedback

* gofmt ran on additional files

* gofmt ran on additional files
2019-07-07 05:20:31 +10:00

79 lines
1.6 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,
}
}
func (l *Logger) newLogEvent(data, header 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)...)
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')
}
e.output.Write(e.data)
e.data = e.data[:0]
eventPool.Put(e)
return nil
}
// 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
}
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
}
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
}