5
5
"fmt"
6
6
"io"
7
7
"os"
8
+ "time"
8
9
9
- joonix "github.com/joonix/log"
10
10
"github.com/sirupsen/logrus"
11
11
)
12
12
@@ -15,18 +15,15 @@ var g *log
15
15
16
16
const chSize int = 64
17
17
18
- type settings struct {
19
- format Format
20
- formatter * logrus.TextFormatter
21
- }
22
-
23
18
type log struct {
24
- ctx context.Context
25
- cancel context.CancelFunc
26
- logger * logrus.Logger
27
- entry * logrus.Entry
28
- settings * settings
29
- ch chan func ()
19
+ ctx context.Context
20
+ cancel context.CancelFunc
21
+ logger * logrus.Logger
22
+ entry * logrus.Entry
23
+ opts * Options
24
+ formatter * TimeZoneFormatter
25
+ ch chan func ()
26
+ doneCh chan bool
30
27
}
31
28
32
29
func (l * log ) log (f func ()) {
@@ -39,6 +36,7 @@ func (l *log) log(f func()) {
39
36
40
37
func (l * log ) loop () {
41
38
if l .ch != nil {
39
+ defer close (l .doneCh )
42
40
for {
43
41
select {
44
42
case f := <- l .ch :
@@ -78,82 +76,62 @@ func init() {
78
76
}
79
77
}
80
78
79
+ type Options struct {
80
+ Context context.Context
81
+ LogLevel Level
82
+ Sync bool
83
+ Location * time.Location
84
+ }
85
+
81
86
// Initialize the Logger
82
- func Init (logLevel Level , format Format , sync bool ) error {
83
- // Create new logger
84
- logger := logrus .New ()
85
- logger .SetLevel (logrus .Level (logLevel ))
86
- settings := & settings {
87
- format : format ,
87
+ func Init (opts * Options ) error {
88
+ if g != nil {
89
+ g .stop ()
88
90
}
89
91
90
- switch format {
91
- case TextFormat :
92
- formatter := new (logrus.TextFormatter )
93
- formatter .TimestampFormat = "2006-01-02 15:04:05.000"
94
- formatter .FullTimestamp = true
95
- logger .SetFormatter (formatter )
96
- settings .formatter = formatter
97
- case FluentdFormat :
98
- f := joonix .NewFormatter ()
99
- if err := joonix .DisableTimestampFormat (f ); err != nil {
100
- return err
101
- }
102
- logger .SetFormatter (f )
103
- case JsonFormat :
104
- logrus .SetFormatter (& logrus.JSONFormatter {})
105
- }
92
+ formatter := newTimeZoneFormatter (opts .Location )
106
93
94
+ // Create new logger
95
+ logger := logrus .New ()
96
+ logger .SetLevel (logrus .Level (opts .LogLevel ))
97
+ logger .SetFormatter (formatter )
107
98
logger .SetOutput (os .Stdout )
108
99
109
- if g != nil {
110
- g .stop ()
111
- }
112
- ctx , cancel := context .WithCancel (context .Background ())
100
+ ctx , cancel := context .WithCancel (opts .Context )
113
101
g = & log {
114
- ctx : ctx ,
115
- cancel : cancel ,
116
- logger : logger ,
117
- entry : logger .WithFields (logrus.Fields {}),
118
- settings : settings ,
102
+ ctx : ctx ,
103
+ cancel : cancel ,
104
+ logger : logger ,
105
+ entry : logger .WithFields (logrus.Fields {}),
106
+ opts : opts ,
107
+ formatter : formatter ,
119
108
}
120
109
121
- if ! sync {
110
+ if ! opts . Sync {
122
111
g .ch = make (chan func (), chSize )
112
+ g .doneCh = make (chan bool )
123
113
go g .loop ()
124
114
}
125
115
126
116
return nil
127
117
}
128
118
129
- func ForceColor () {
130
- if g .settings == nil {
131
- return
132
- }
133
- switch g .settings .format {
134
- case TextFormat :
135
- g .settings .formatter .ForceColors = true
136
- g .settings .formatter .DisableColors = false
137
- g .logger .SetFormatter (g .settings .formatter )
138
- case FluentdFormat :
139
- case JsonFormat :
140
- case JournaldFormat :
119
+ func WaitForDone () {
120
+ if g .doneCh != nil {
121
+ <- g .doneCh
141
122
}
142
123
}
143
124
125
+ func ForceColor () {
126
+ g .formatter .formatter .ForceColors = true
127
+ g .formatter .formatter .DisableColors = false
128
+ g .logger .SetFormatter (g .formatter )
129
+ }
130
+
144
131
func DisableColor () {
145
- if g .settings == nil {
146
- return
147
- }
148
- switch g .settings .format {
149
- case TextFormat :
150
- g .settings .formatter .ForceColors = false
151
- g .settings .formatter .DisableColors = true
152
- g .logger .SetFormatter (g .settings .formatter )
153
- case FluentdFormat :
154
- case JsonFormat :
155
- case JournaldFormat :
156
- }
132
+ g .formatter .formatter .ForceColors = false
133
+ g .formatter .formatter .DisableColors = true
134
+ g .logger .SetFormatter (g .formatter )
157
135
}
158
136
159
137
func SetLevel (logLevel Level ) {
0 commit comments