prometheusmetricshost-metricsmachine-metricsnode-metricsprocfsprometheus-exportersystem-informationsystem-metrics
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
package logrus |
|
|
|
import ( |
|
"bufio" |
|
"io" |
|
"runtime" |
|
) |
|
|
|
func (logger *Logger) Writer() *io.PipeWriter { |
|
return logger.WriterLevel(InfoLevel) |
|
} |
|
|
|
func (logger *Logger) WriterLevel(level Level) *io.PipeWriter { |
|
return NewEntry(logger).WriterLevel(level) |
|
} |
|
|
|
func (entry *Entry) Writer() *io.PipeWriter { |
|
return entry.WriterLevel(InfoLevel) |
|
} |
|
|
|
func (entry *Entry) WriterLevel(level Level) *io.PipeWriter { |
|
reader, writer := io.Pipe() |
|
|
|
var printFunc func(args ...interface{}) |
|
|
|
switch level { |
|
case DebugLevel: |
|
printFunc = entry.Debug |
|
case InfoLevel: |
|
printFunc = entry.Info |
|
case WarnLevel: |
|
printFunc = entry.Warn |
|
case ErrorLevel: |
|
printFunc = entry.Error |
|
case FatalLevel: |
|
printFunc = entry.Fatal |
|
case PanicLevel: |
|
printFunc = entry.Panic |
|
default: |
|
printFunc = entry.Print |
|
} |
|
|
|
go entry.writerScanner(reader, printFunc) |
|
runtime.SetFinalizer(writer, writerFinalizer) |
|
|
|
return writer |
|
} |
|
|
|
func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) { |
|
scanner := bufio.NewScanner(reader) |
|
for scanner.Scan() { |
|
printFunc(scanner.Text()) |
|
} |
|
if err := scanner.Err(); err != nil { |
|
entry.Errorf("Error while reading from Writer: %s", err) |
|
} |
|
reader.Close() |
|
} |
|
|
|
func writerFinalizer(writer *io.PipeWriter) { |
|
writer.Close() |
|
}
|
|
|