@@ -47,13 +47,23 @@ type Receiver struct {
4747}
4848
4949// Output formats the give log inputs, caller info and writes to console
50- func (r * Receiver ) Output (entry * Entry ) error {
50+ func (r * Receiver ) Output (level Level , calldepth int , format * string , v ... interface {}) error {
51+ if level > r .level {
52+ return nil
53+ }
54+
55+ now := time .Now () // get this early
56+
5157 if r .Closed () {
5258 return ErrWriterIsClosed
5359 }
5460
61+ var (
62+ file string
63+ line int
64+ )
5565 if r .isFileInfo || r .isLineInfo {
56- entry . File , entry . Line = fetchCallerInfo (3 )
66+ file , line = fetchCallerInfo (calldepth )
5767 }
5868
5969 r .m .Lock ()
@@ -66,6 +76,15 @@ func (r *Receiver) Output(entry *Entry) error {
6676 }
6777 }
6878
79+ entry := & Entry {
80+ Level : level ,
81+ Time : now ,
82+ Format : format ,
83+ Values : & v ,
84+ File : file ,
85+ Line : line ,
86+ }
87+
6988 // format the log entry message as per pattern
7089 buf , err := r .Format (r .Flags , entry , r .isColor )
7190 if err != nil {
@@ -79,10 +98,8 @@ func (r *Receiver) Output(entry *Entry) error {
7998 }
8099
81100 // calculate receiver stats
82- if r .stats != nil {
83- r .stats .bytes += int64 (size )
84- r .stats .lines ++
85- }
101+ r .stats .bytes += int64 (size )
102+ r .stats .lines ++
86103
87104 return nil
88105}
@@ -119,127 +136,72 @@ func (r *Receiver) SetPattern(pattern string) error {
119136 return err
120137 }
121138 r .Flags = flags
139+ r .isFileInfo = isFileFlagExists (flags )
140+ r .isLineInfo = isFmtFlagExists (flags , FmtFlagLine )
141+ r .isUTC = isFmtFlagExists (flags , FmtFlagUTCTime )
122142
123143 return nil
124144}
125145
146+ // SetLevel allows to set log level dyamically
147+ func (r * Receiver ) SetLevel (level Level ) {
148+ r .m .Lock ()
149+ defer r .m .Unlock ()
150+ r .level = level
151+ }
152+
126153func (r * Receiver ) isFileReceiver () bool {
127154 return r .Type == "FILE"
128155}
129156
130157// Error logs message as `LevelError`
131158func (r * Receiver ) Error (v ... interface {}) {
132- if r .level >= LevelError {
133- _ = r .Output (& Entry {
134- Time : time .Now (),
135- Level : LevelError ,
136- Values : v ,
137- })
138- }
159+ _ = r .Output (LevelError , 2 , nil , v ... )
139160}
140161
141162// Errorf logs message as `LevelError`
142163func (r * Receiver ) Errorf (format string , v ... interface {}) {
143- if r .level >= LevelError {
144- _ = r .Output (& Entry {
145- Time : time .Now (),
146- Level : LevelError ,
147- Format : format ,
148- Values : v ,
149- })
150- }
164+ _ = r .Output (LevelError , 2 , & format , v ... )
151165}
152166
153167// Warn logs message as `LevelWarn`
154168func (r * Receiver ) Warn (v ... interface {}) {
155- if r .level >= LevelWarn {
156- _ = r .Output (& Entry {
157- Time : time .Now (),
158- Level : LevelWarn ,
159- Values : v ,
160- })
161- }
169+ _ = r .Output (LevelWarn , 2 , nil , v ... )
162170}
163171
164172// Warnf logs message as `LevelWarn`
165173func (r * Receiver ) Warnf (format string , v ... interface {}) {
166- if r .level >= LevelWarn {
167- _ = r .Output (& Entry {
168- Time : time .Now (),
169- Level : LevelWarn ,
170- Format : format ,
171- Values : v ,
172- })
173- }
174+ _ = r .Output (LevelWarn , 2 , & format , v ... )
174175}
175176
176177// Info logs message as `LevelInfo`
177178func (r * Receiver ) Info (v ... interface {}) {
178- if r .level >= LevelInfo {
179- _ = r .Output (& Entry {
180- Time : time .Now (),
181- Level : LevelInfo ,
182- Values : v ,
183- })
184- }
179+ _ = r .Output (LevelInfo , 2 , nil , v ... )
185180}
186181
187182// Infof logs message as `LevelInfo`
188183func (r * Receiver ) Infof (format string , v ... interface {}) {
189- if r .level >= LevelInfo {
190- _ = r .Output (& Entry {
191- Time : time .Now (),
192- Level : LevelInfo ,
193- Format : format ,
194- Values : v ,
195- })
196- }
184+ _ = r .Output (LevelInfo , 2 , & format , v ... )
197185}
198186
199187// Debug logs message as `LevelDebug`
200188func (r * Receiver ) Debug (v ... interface {}) {
201- if r .level >= LevelDebug {
202- _ = r .Output (& Entry {
203- Time : time .Now (),
204- Level : LevelDebug ,
205- Values : v ,
206- })
207- }
189+ _ = r .Output (LevelDebug , 2 , nil , v ... )
208190}
209191
210192// Debugf logs message as `LevelDebug`
211193func (r * Receiver ) Debugf (format string , v ... interface {}) {
212- if r .level >= LevelDebug {
213- _ = r .Output (& Entry {
214- Time : time .Now (),
215- Level : LevelDebug ,
216- Format : format ,
217- Values : v ,
218- })
219- }
194+ _ = r .Output (LevelDebug , 2 , & format , v ... )
220195}
221196
222197// Trace logs message as `LevelTrace`
223198func (r * Receiver ) Trace (v ... interface {}) {
224- if r .level >= LevelTrace {
225- _ = r .Output (& Entry {
226- Time : time .Now (),
227- Level : LevelTrace ,
228- Values : v ,
229- })
230- }
199+ _ = r .Output (LevelTrace , 2 , nil , v ... )
231200}
232201
233202// Tracef logs message as `LevelTrace`
234203func (r * Receiver ) Tracef (format string , v ... interface {}) {
235- if r .level >= LevelTrace {
236- _ = r .Output (& Entry {
237- Time : time .Now (),
238- Level : LevelTrace ,
239- Format : format ,
240- Values : v ,
241- })
242- }
204+ _ = r .Output (LevelTrace , 2 , & format , v ... )
243205}
244206
245207// unexported methods
0 commit comments