1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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)
|