forked from thrasher-corp/gocryptotrader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsublogger.go
55 lines (49 loc) · 1.44 KB
/
sublogger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package log
import (
"errors"
"fmt"
"strings"
)
var errMultiWriterHolderIsNil = errors.New("multiwriter holder is nil")
// NewSubLogger allows for a new sub logger to be registered.
func NewSubLogger(name string) (*SubLogger, error) {
if name == "" {
return nil, errEmptyLoggerName
}
name = strings.ToUpper(name)
mu.Lock()
defer mu.Unlock()
if _, ok := SubLoggers[name]; ok {
return nil, fmt.Errorf("'%v' %w", name, ErrSubLoggerAlreadyRegistered)
}
return registerNewSubLogger(name), nil
}
// SetOutput overrides the default output with a new writer
func (sl *SubLogger) setOutput(o *multiWriterHolder) error {
if o == nil {
return errMultiWriterHolderIsNil
}
sl.output = o
return nil
}
// SetLevels overrides the default levels with new levels; levelception
func (sl *SubLogger) setLevels(newLevels Levels) {
sl.levels = newLevels
}
// getFields returns sub logger specific fields for the potential log job.
// Note: Calling function must have mutex lock in place.
func (sl *SubLogger) getFields() *fields {
if sl == nil || globalLogConfig == nil || globalLogConfig.Enabled == nil || !*globalLogConfig.Enabled {
return nil
}
f := logFieldsPool.Get().(*fields) //nolint:forcetypeassert // Not necessary from a pool
f.info = sl.levels.Info
f.warn = sl.levels.Warn
f.debug = sl.levels.Debug
f.error = sl.levels.Error
f.name = sl.name
f.output = sl.output
f.botName = sl.botName
f.structuredLogging = sl.structuredLogging
return f
}