logger.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package logger
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. )
  7. type LogLevel int
  8. var Default Interface = Logger{Writer: log.New(os.Stdout, "\r\n", log.LstdFlags)}
  9. const (
  10. Error LogLevel = iota + 1
  11. Warn
  12. Info
  13. )
  14. // Interface logger interface
  15. type Interface interface {
  16. LogMode(LogLevel) Interface
  17. Info(string, ...interface{})
  18. Warn(string, ...interface{})
  19. Error(string, ...interface{})
  20. RunWith(LogLevel, func())
  21. }
  22. // Writer log writer interface
  23. type Writer interface {
  24. Print(...interface{})
  25. }
  26. type Logger struct {
  27. Writer
  28. logLevel LogLevel
  29. }
  30. func (logger Logger) LogMode(level LogLevel) Interface {
  31. return Logger{Writer: logger.Writer, logLevel: level}
  32. }
  33. // Info print info
  34. func (logger Logger) Info(msg string, data ...interface{}) {
  35. if logger.logLevel >= Info {
  36. logger.Print("[info] " + fmt.Sprintf(msg, data...))
  37. }
  38. }
  39. // Warn print warn messages
  40. func (logger Logger) Warn(msg string, data ...interface{}) {
  41. if logger.logLevel >= Warn {
  42. logger.Print("[warn] " + fmt.Sprintf(msg, data...))
  43. }
  44. }
  45. // Error print error messages
  46. func (logger Logger) Error(msg string, data ...interface{}) {
  47. if logger.logLevel >= Error {
  48. logger.Print("[error] " + fmt.Sprintf(msg, data...))
  49. }
  50. }
  51. func (logger Logger) RunWith(logLevel LogLevel, fc func()) {
  52. if logger.logLevel >= logLevel {
  53. fc()
  54. }
  55. }