log.go 496 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package agollo
  2. import (
  3. "fmt"
  4. "io"
  5. "io/ioutil"
  6. )
  7. type Logger interface {
  8. Log(kvs ...interface{})
  9. }
  10. type LoggerOption func(*logger)
  11. func LoggerWriter(w io.Writer) LoggerOption {
  12. return func(l *logger) {
  13. l.w = w
  14. }
  15. }
  16. func NewLogger(opts ...LoggerOption) Logger {
  17. l := &logger{}
  18. for _, opt := range opts {
  19. opt(l)
  20. }
  21. if l.w == nil {
  22. l.w = ioutil.Discard
  23. }
  24. return l
  25. }
  26. type logger struct {
  27. w io.Writer
  28. }
  29. func (l *logger) Log(kvs ...interface{}) {
  30. fmt.Fprintln(l.w, kvs...)
  31. }