log.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package log
  2. import (
  3. "fmt"
  4. )
  5. const (
  6. DebugLevel = LogLevel(0)
  7. InfoLevel = LogLevel(1)
  8. WarningLevel = LogLevel(2)
  9. ErrorLevel = LogLevel(3)
  10. )
  11. type errorLog struct {
  12. prefix string
  13. format string
  14. values []interface{}
  15. }
  16. func (this *errorLog) String() string {
  17. var data string
  18. if len(this.values) == 0 {
  19. data = this.format
  20. } else {
  21. data = fmt.Sprintf(this.format, this.values...)
  22. }
  23. return this.prefix + data
  24. }
  25. var (
  26. noOpLoggerInstance logWriter = &noOpLogWriter{}
  27. streamLoggerInstance logWriter = newStdOutLogWriter()
  28. debugLogger = noOpLoggerInstance
  29. infoLogger = noOpLoggerInstance
  30. warningLogger = streamLoggerInstance
  31. errorLogger = streamLoggerInstance
  32. )
  33. type LogLevel int
  34. func SetLogLevel(level LogLevel) {
  35. debugLogger = noOpLoggerInstance
  36. if level <= DebugLevel {
  37. debugLogger = streamLoggerInstance
  38. }
  39. infoLogger = noOpLoggerInstance
  40. if level <= InfoLevel {
  41. infoLogger = streamLoggerInstance
  42. }
  43. warningLogger = noOpLoggerInstance
  44. if level <= WarningLevel {
  45. warningLogger = streamLoggerInstance
  46. }
  47. errorLogger = noOpLoggerInstance
  48. if level <= ErrorLevel {
  49. errorLogger = streamLoggerInstance
  50. }
  51. }
  52. func InitErrorLogger(file string) error {
  53. logger, err := newFileLogWriter(file)
  54. if err != nil {
  55. Error("Failed to create error logger on file (%s): %v", file, err)
  56. return err
  57. }
  58. streamLoggerInstance = logger
  59. return nil
  60. }
  61. // Debug outputs a debug log with given format and optional arguments.
  62. func Debug(format string, v ...interface{}) {
  63. debugLogger.Log(&errorLog{
  64. prefix: "[Debug]",
  65. format: format,
  66. values: v,
  67. })
  68. }
  69. // Info outputs an info log with given format and optional arguments.
  70. func Info(format string, v ...interface{}) {
  71. infoLogger.Log(&errorLog{
  72. prefix: "[Info]",
  73. format: format,
  74. values: v,
  75. })
  76. }
  77. // Warning outputs a warning log with given format and optional arguments.
  78. func Warning(format string, v ...interface{}) {
  79. warningLogger.Log(&errorLog{
  80. prefix: "[Warning]",
  81. format: format,
  82. values: v,
  83. })
  84. }
  85. // Error outputs an error log with given format and optional arguments.
  86. func Error(format string, v ...interface{}) {
  87. errorLogger.Log(&errorLog{
  88. prefix: "[Error]",
  89. format: format,
  90. values: v,
  91. })
  92. }