MCPcopy
hub / github.com/rs/zerolog / WriteLevel

Method WriteLevel

writer.go:255–288  ·  view source on GitHub ↗
(l Level, p []byte)

Source from the content-addressed store, hash-verified

253}
254
255func (w *TriggerLevelWriter) WriteLevel(l Level, p []byte) (n int, err error) {
256 w.mu.Lock()
257 defer w.mu.Unlock()
258
259 // At first trigger level or above log line, we flush the buffer and change the
260 // trigger state to triggered.
261 if !w.triggered && l >= w.TriggerLevel {
262 err := w.trigger()
263 if err != nil {
264 return 0, err
265 }
266 }
267
268 // Unless triggered, we buffer everything at and below ConditionalLevel.
269 if !w.triggered && l <= w.ConditionalLevel {
270 if w.buf == nil {
271 w.buf = triggerWriterPool.Get().(*bytes.Buffer)
272 }
273
274 // We prefix each log line with a byte with the level.
275 // Hopefully we will never have a level value which equals a newline
276 // (which could interfere with reconstruction of log lines in the trigger method).
277 w.buf.WriteByte(byte(l))
278 w.buf.Write(p)
279 return len(p), nil
280 }
281
282 // Anything above ConditionalLevel is always passed through.
283 // Once triggered, everything is passed through.
284 if lw, ok := w.Writer.(LevelWriter); ok {
285 return lw.WriteLevel(l, p)
286 }
287 return w.Write(p)
288}
289
290// trigger expects lock to be held.
291func (w *TriggerLevelWriter) trigger() error {

Callers 1

TestTriggerLevelWriterFunction · 0.95

Calls 3

triggerMethod · 0.95
WriteLevelMethod · 0.65
WriteMethod · 0.45

Tested by 1

TestTriggerLevelWriterFunction · 0.76