You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

logging.go 970B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package irc
  2. import (
  3. "io"
  4. "log"
  5. "os"
  6. )
  7. type Logging struct {
  8. debug *log.Logger
  9. info *log.Logger
  10. warn *log.Logger
  11. error *log.Logger
  12. }
  13. var (
  14. levels = map[string]uint8{
  15. "debug": 4,
  16. "info": 3,
  17. "warn": 2,
  18. "error": 1,
  19. }
  20. devNull io.Writer
  21. )
  22. func init() {
  23. var err error
  24. devNull, err = os.Open(os.DevNull)
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28. }
  29. func NewLogger(on bool) *log.Logger {
  30. return log.New(output(on), "", log.LstdFlags)
  31. }
  32. func output(on bool) io.Writer {
  33. if on {
  34. return os.Stdout
  35. }
  36. return devNull
  37. }
  38. func (logging *Logging) SetLevel(level string) {
  39. logging.debug = NewLogger(levels[level] >= levels["debug"])
  40. logging.info = NewLogger(levels[level] >= levels["info"])
  41. logging.warn = NewLogger(levels[level] >= levels["warn"])
  42. logging.error = NewLogger(levels[level] >= levels["error"])
  43. }
  44. func NewLogging(level string) *Logging {
  45. logging := &Logging{}
  46. logging.SetLevel(level)
  47. return logging
  48. }
  49. var (
  50. Log = NewLogging("warn")
  51. )