-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
113 lines (100 loc) · 2.81 KB
/
options.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package logger
import (
"log/syslog"
"time"
"github.com/primalcs/logger/listener"
"github.com/primalcs/logger/types"
"github.com/primalcs/logger/writer"
)
// Option implements options pattern for Logger
type Option func(*Logger) error
// WithTCPConnection adds a tcp syslog writer to Logger
func WithTCPConnection(addr, tag string, priority syslog.Priority, bufferLen int) Option {
return func(logger *Logger) error {
w, err := writer.NewWriter(types.ConnectionTCP, addr, tag, priority, bufferLen)
if err != nil {
return err
}
logger.writers.AddWriter(w)
return nil
}
}
// WithUDPConnection adds a udp syslog writer to Logger
func WithUDPConnection(addr, tag string, priority syslog.Priority, bufferLen int) Option {
return func(logger *Logger) error {
w, err := writer.NewWriter(types.ConnectionUDP, addr, tag, priority, bufferLen)
if err != nil {
return err
}
logger.writers.AddWriter(w)
return nil
}
}
// WithLocalWriter adds a local syslog writer to Logger
func WithLocalWriter(tag string, priority syslog.Priority, bufferLen int) Option {
return func(logger *Logger) error {
w, err := writer.NewWriter(types.ConnectionLOCAL, "", tag, priority, bufferLen)
if err != nil {
return err
}
logger.writers.AddWriter(w)
return nil
}
}
// WithFileWriter creates a log file at specified address
func WithFileWriter(addr string) Option {
return func(logger *Logger) error {
w, err := writer.NewWriter(types.ConnectionFILE, addr, "", 0, 1)
if err != nil {
return err
}
logger.writers.AddWriter(w)
return nil
}
}
// WithNSQWriter creates a simple connection to NSQ
func WithNSQWriter(addr, topic string) Option {
return func(logger *Logger) error {
w, err := writer.NewWriter(types.ConnectionNSQ, addr, topic, 0, 1)
if err != nil {
return err
}
logger.writers.AddWriter(w)
return nil
}
}
// WithLogLevel specifies the maximum allowed log level
func WithLogLevel(level types.LogLevel) Option {
return func(logger *Logger) error {
logger.config.SetLogLevel(level)
return nil
}
}
// WithDelimiter specifies message delimiter
func WithDelimiter(delimiter string) Option {
return func(logger *Logger) error {
logger.config.SetDelimiter(delimiter)
return nil
}
}
// WithHttpListener creates new http-server for configuring logger and run it in a new goroutine
func WithHttpListener(port int) Option {
return func(logger *Logger) error {
go listener.NewListener(port, logger.config)
return nil
}
}
// WithTimeLog specifies time format and location for logs
func WithTimeLog(format string, loc *time.Location) Option {
return func(logger *Logger) error {
logger.config.SetTimeOptions(format, loc)
return nil
}
}
// WithCaller adds runtime.Caller() info to logs
func WithCaller() Option {
return func(logger *Logger) error {
logger.config.SetWithCaller(true)
return nil
}
}