-
Notifications
You must be signed in to change notification settings - Fork 0
/
selector.go
71 lines (61 loc) · 1.37 KB
/
selector.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package log
import (
"errors"
"github.com/rl404/fairy/log"
"github.com/rl404/fairy/log/newrelic"
"github.com/rl404/fairy/log/nop"
"github.com/rl404/fairy/log/zerolog"
)
// LogLevel is level of log that will be printed.
// Will print level that is higher than your
// chosen one.
type LogLevel int8
// Available log level.
const (
TraceLevel LogLevel = iota - 1
DebugLevel
InfoLevel
WarnLevel
ErrorLevel
FatalLevel
PanicLevel
Disabled
)
// LogType is type for logging library.
type LogType int8
// Available types for logging.
const (
NOP LogType = iota
Zerolog
Newrelic
)
// ErrInvalidLogType is error for invalid log type.
var ErrInvalidLogType = errors.New("invalid log type")
// Config is log config.
type Config struct {
Type LogType
Level LogLevel
JsonFormat bool
Color bool
// For newrelic.
NewrelicName string
NewrelicLicense string
}
// New to create new log client depends on the type.
// Color will not work in json format.
func New(cfg Config) (log.Logger, error) {
switch cfg.Type {
case NOP:
return nop.New(), nil
case Zerolog:
return zerolog.New(zerolog.LogLevel(cfg.Level), cfg.JsonFormat, cfg.Color), nil
case Newrelic:
return newrelic.New(newrelic.Config{
Name: cfg.NewrelicName,
LicenseKey: cfg.NewrelicLicense,
Level: newrelic.LogLevel(cfg.Level),
})
default:
return nil, ErrInvalidLogType
}
}