logger.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package log
  2. import (
  3. "fmt"
  4. log "github.com/alecthomas/log4go"
  5. )
  6. var root log.Logger = make(log.Logger)
  7. func LogTo(target string, level_name string) {
  8. var writer log.LogWriter = nil
  9. switch target {
  10. case "stdout":
  11. writer = log.NewConsoleLogWriter()
  12. case "none":
  13. // no logging
  14. default:
  15. writer = log.NewFileLogWriter(target, true)
  16. }
  17. if writer != nil {
  18. var level = log.DEBUG
  19. switch level_name {
  20. case "FINEST":
  21. level = log.FINEST
  22. case "FINE":
  23. level = log.FINE
  24. case "DEBUG":
  25. level = log.DEBUG
  26. case "TRACE":
  27. level = log.TRACE
  28. case "INFO":
  29. level = log.INFO
  30. case "WARNING":
  31. level = log.WARNING
  32. case "ERROR":
  33. level = log.ERROR
  34. case "CRITICAL":
  35. level = log.CRITICAL
  36. default:
  37. level = log.DEBUG
  38. }
  39. root.AddFilter("log", level, writer)
  40. }
  41. }
  42. type Logger interface {
  43. AddLogPrefix(string)
  44. ClearLogPrefixes()
  45. Debug(string, ...interface{})
  46. Info(string, ...interface{})
  47. Warn(string, ...interface{}) error
  48. Error(string, ...interface{}) error
  49. }
  50. type PrefixLogger struct {
  51. *log.Logger
  52. prefix string
  53. }
  54. func NewPrefixLogger(prefixes ...string) Logger {
  55. logger := &PrefixLogger{Logger: &root}
  56. for _, p := range prefixes {
  57. logger.AddLogPrefix(p)
  58. }
  59. return logger
  60. }
  61. func (pl *PrefixLogger) pfx(fmtstr string) interface{} {
  62. return fmt.Sprintf("%s %s", pl.prefix, fmtstr)
  63. }
  64. func (pl *PrefixLogger) Debug(arg0 string, args ...interface{}) {
  65. pl.Logger.Debug(pl.pfx(arg0), args...)
  66. }
  67. func (pl *PrefixLogger) Info(arg0 string, args ...interface{}) {
  68. pl.Logger.Info(pl.pfx(arg0), args...)
  69. }
  70. func (pl *PrefixLogger) Warn(arg0 string, args ...interface{}) error {
  71. return pl.Logger.Warn(pl.pfx(arg0), args...)
  72. }
  73. func (pl *PrefixLogger) Error(arg0 string, args ...interface{}) error {
  74. return pl.Logger.Error(pl.pfx(arg0), args...)
  75. }
  76. func (pl *PrefixLogger) AddLogPrefix(prefix string) {
  77. if len(pl.prefix) > 0 {
  78. pl.prefix += " "
  79. }
  80. pl.prefix += "[" + prefix + "]"
  81. }
  82. func (pl *PrefixLogger) ClearLogPrefixes() {
  83. pl.prefix = ""
  84. }
  85. // we should never really use these . . . always prefer logging through a prefix logger
  86. func Debug(arg0 string, args ...interface{}) {
  87. root.Debug(arg0, args...)
  88. }
  89. func Info(arg0 string, args ...interface{}) {
  90. root.Info(arg0, args...)
  91. }
  92. func Warn(arg0 string, args ...interface{}) error {
  93. return root.Warn(arg0, args...)
  94. }
  95. func Error(arg0 string, args ...interface{}) error {
  96. return root.Error(arg0, args...)
  97. }