Files
gocryptotrader/logger/logger_types.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

90 lines
1.9 KiB
Go

package logger
import (
"io"
"sync"
)
const timestampFormat = " 02/01/2006 15:04:05 "
const spacer = "|"
// Config holds configuration settings loaded from bot config
type Config struct {
Enabled *bool `json:"enabled"`
SubLoggerConfig
LoggerFileConfig *loggerFileConfig `json:"fileSettings,omitempty"`
AdvancedSettings advancedSettings `json:"advancedSettings"`
SubLoggers []SubLoggerConfig `json:"subloggers,omitempty"`
}
type advancedSettings struct {
Spacer string `json:"spacer"`
TimeStampFormat string `json:"timeStampFormat"`
Headers headers `json:"headers"`
}
type headers struct {
Info string `json:"info"`
Warn string `json:"warn"`
Debug string `json:"debug"`
Error string `json:"error"`
}
// SubLoggerConfig holds sub logger configuration settings loaded from bot config
type SubLoggerConfig struct {
Name string `json:"name,omitempty"`
Level string `json:"level"`
Output string `json:"output"`
}
type loggerFileConfig struct {
FileName string `json:"filename,omitempty"`
Rotate *bool `json:"rotate,omitempty"`
MaxSize int64 `json:"maxsize,omitempty"`
}
// Logger each instance of logger settings
type Logger struct {
Timestamp string
InfoHeader, ErrorHeader, DebugHeader, WarnHeader string
Spacer string
}
type Levels struct {
Info, Debug, Warn, Error bool
}
type subLogger struct {
name string
Levels
output io.Writer
}
type LogEvent struct {
data []byte
output io.Writer
}
type multiWriter struct {
writers []io.Writer
mu sync.Mutex
}
var (
logger = &Logger{}
FileLoggingConfiguredCorrectly bool
GlobalLogConfig = &Config{} // GlobalLogConfig hold global configuration options for logger
GlobalLogFile = &Rotate{}
eventPool = &sync.Pool{
New: func() interface{} {
return &LogEvent{
data: make([]byte, 0, 80),
}
},
}
LogPath string
)