Mercurial > yakumo_izuru > aya
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 } |
