package io_writer_to_logger import ( "bufio" "io" ) type LogEmitFunc func(msg string) type WriterLogWrapper struct { emitFunc LogEmitFunc pipeWriter *io.PipeWriter pipeReader *io.PipeReader scanner *bufio.Scanner } func (w *WriterLogWrapper) Close() error { err1 := w.pipeWriter.Close() err2 := w.pipeReader.Close() if err1 != nil { return err1 } if err2 != nil { return err2 } return nil } func NewWriterLogWrapper(emitFunc LogEmitFunc) *WriterLogWrapper { pr, pw := io.Pipe() return &WriterLogWrapper{ emitFunc: emitFunc, pipeWriter: pw, pipeReader: pr, scanner: bufio.NewScanner(pr), } } func (w WriterLogWrapper) Write(p []byte) (n int, err error) { return w.pipeWriter.Write(p) } func (w WriterLogWrapper) Run() { for w.scanner.Scan() { t := w.scanner.Text() w.emitFunc(t) } } var _ io.WriteCloser = (*WriterLogWrapper)(nil)