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 1.0KB

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