iowrlog.go 883 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package io_writer_to_logger
  2. import (
  3. "bufio"
  4. "io"
  5. )
  6. type LogEmitFunc func(msg string)
  7. type WriterLogWrapper struct {
  8. emitFunc LogEmitFunc
  9. pipeWriter *io.PipeWriter
  10. pipeReader *io.PipeReader
  11. scanner *bufio.Scanner
  12. }
  13. func (w *WriterLogWrapper) Close() error {
  14. err1 := w.pipeWriter.Close()
  15. err2 := w.pipeReader.Close()
  16. if err1 != nil {
  17. return err1
  18. }
  19. if err2 != nil {
  20. return err2
  21. }
  22. return nil
  23. }
  24. func NewWriterLogWrapper(emitFunc LogEmitFunc) *WriterLogWrapper {
  25. pr, pw := io.Pipe()
  26. return &WriterLogWrapper{
  27. emitFunc: emitFunc,
  28. pipeWriter: pw,
  29. pipeReader: pr,
  30. scanner: bufio.NewScanner(pr),
  31. }
  32. }
  33. func (w WriterLogWrapper) Write(p []byte) (n int, err error) {
  34. return w.pipeWriter.Write(p)
  35. }
  36. func (w WriterLogWrapper) Run() {
  37. for w.scanner.Scan() {
  38. t := w.scanner.Text()
  39. w.emitFunc(t)
  40. }
  41. }
  42. var _ io.WriteCloser = (*WriterLogWrapper)(nil)