comparison vendor/github.com/sirupsen/logrus/writer.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
comparison
equal deleted inserted replaced
65:6d985efa0f7a 66:787b5ee0289d
1 package logrus
2
3 import (
4 "bufio"
5 "io"
6 "runtime"
7 )
8
9 // Writer at INFO level. See WriterLevel for details.
10 func (logger *Logger) Writer() *io.PipeWriter {
11 return logger.WriterLevel(InfoLevel)
12 }
13
14 // WriterLevel returns an io.Writer that can be used to write arbitrary text to
15 // the logger at the given log level. Each line written to the writer will be
16 // printed in the usual way using formatters and hooks. The writer is part of an
17 // io.Pipe and it is the callers responsibility to close the writer when done.
18 // This can be used to override the standard library logger easily.
19 func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
20 return NewEntry(logger).WriterLevel(level)
21 }
22
23 func (entry *Entry) Writer() *io.PipeWriter {
24 return entry.WriterLevel(InfoLevel)
25 }
26
27 func (entry *Entry) WriterLevel(level Level) *io.PipeWriter {
28 reader, writer := io.Pipe()
29
30 var printFunc func(args ...interface{})
31
32 switch level {
33 case TraceLevel:
34 printFunc = entry.Trace
35 case DebugLevel:
36 printFunc = entry.Debug
37 case InfoLevel:
38 printFunc = entry.Info
39 case WarnLevel:
40 printFunc = entry.Warn
41 case ErrorLevel:
42 printFunc = entry.Error
43 case FatalLevel:
44 printFunc = entry.Fatal
45 case PanicLevel:
46 printFunc = entry.Panic
47 default:
48 printFunc = entry.Print
49 }
50
51 go entry.writerScanner(reader, printFunc)
52 runtime.SetFinalizer(writer, writerFinalizer)
53
54 return writer
55 }
56
57 func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
58 scanner := bufio.NewScanner(reader)
59 for scanner.Scan() {
60 printFunc(scanner.Text())
61 }
62 if err := scanner.Err(); err != nil {
63 entry.Errorf("Error while reading from Writer: %s", err)
64 }
65 reader.Close()
66 }
67
68 func writerFinalizer(writer *io.PipeWriter) {
69 writer.Close()
70 }