logger.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright 2015 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package xorm
  5. import (
  6. "fmt"
  7. "io"
  8. "log"
  9. "github.com/go-xorm/core"
  10. )
  11. const (
  12. DEFAULT_LOG_PREFIX = "[xorm]"
  13. DEFAULT_LOG_FLAG = log.Ldate | log.Lmicroseconds
  14. DEFAULT_LOG_LEVEL = core.LOG_DEBUG
  15. )
  16. var _ core.ILogger = DiscardLogger{}
  17. // DiscardLogger don't log implementation for core.ILogger
  18. type DiscardLogger struct{}
  19. // Debug empty implementation
  20. func (DiscardLogger) Debug(v ...interface{}) {}
  21. // Debugf empty implementation
  22. func (DiscardLogger) Debugf(format string, v ...interface{}) {}
  23. // Error empty implementation
  24. func (DiscardLogger) Error(v ...interface{}) {}
  25. // Errorf empty implementation
  26. func (DiscardLogger) Errorf(format string, v ...interface{}) {}
  27. // Info empty implementation
  28. func (DiscardLogger) Info(v ...interface{}) {}
  29. // Infof empty implementation
  30. func (DiscardLogger) Infof(format string, v ...interface{}) {}
  31. // Warn empty implementation
  32. func (DiscardLogger) Warn(v ...interface{}) {}
  33. // Warnf empty implementation
  34. func (DiscardLogger) Warnf(format string, v ...interface{}) {}
  35. // Level empty implementation
  36. func (DiscardLogger) Level() core.LogLevel {
  37. return core.LOG_UNKNOWN
  38. }
  39. // SetLevel empty implementation
  40. func (DiscardLogger) SetLevel(l core.LogLevel) {}
  41. // ShowSQL empty implementation
  42. func (DiscardLogger) ShowSQL(show ...bool) {}
  43. // IsShowSQL empty implementation
  44. func (DiscardLogger) IsShowSQL() bool {
  45. return false
  46. }
  47. // SimpleLogger is the default implment of core.ILogger
  48. type SimpleLogger struct {
  49. DEBUG *log.Logger
  50. ERR *log.Logger
  51. INFO *log.Logger
  52. WARN *log.Logger
  53. level core.LogLevel
  54. showSQL bool
  55. }
  56. var _ core.ILogger = &SimpleLogger{}
  57. // NewSimpleLogger use a special io.Writer as logger output
  58. func NewSimpleLogger(out io.Writer) *SimpleLogger {
  59. return NewSimpleLogger2(out, DEFAULT_LOG_PREFIX, DEFAULT_LOG_FLAG)
  60. }
  61. // NewSimpleLogger2 let you customrize your logger prefix and flag
  62. func NewSimpleLogger2(out io.Writer, prefix string, flag int) *SimpleLogger {
  63. return NewSimpleLogger3(out, prefix, flag, DEFAULT_LOG_LEVEL)
  64. }
  65. // NewSimpleLogger3 let you customrize your logger prefix and flag and logLevel
  66. func NewSimpleLogger3(out io.Writer, prefix string, flag int, l core.LogLevel) *SimpleLogger {
  67. return &SimpleLogger{
  68. DEBUG: log.New(out, fmt.Sprintf("%s [debug] ", prefix), flag),
  69. ERR: log.New(out, fmt.Sprintf("%s [error] ", prefix), flag),
  70. INFO: log.New(out, fmt.Sprintf("%s [info] ", prefix), flag),
  71. WARN: log.New(out, fmt.Sprintf("%s [warn] ", prefix), flag),
  72. level: l,
  73. }
  74. }
  75. // Error implement core.ILogger
  76. func (s *SimpleLogger) Error(v ...interface{}) {
  77. if s.level <= core.LOG_ERR {
  78. s.ERR.Output(2, fmt.Sprint(v...))
  79. }
  80. return
  81. }
  82. // Errorf implement core.ILogger
  83. func (s *SimpleLogger) Errorf(format string, v ...interface{}) {
  84. if s.level <= core.LOG_ERR {
  85. s.ERR.Output(2, fmt.Sprintf(format, v...))
  86. }
  87. return
  88. }
  89. // Debug implement core.ILogger
  90. func (s *SimpleLogger) Debug(v ...interface{}) {
  91. if s.level <= core.LOG_DEBUG {
  92. s.DEBUG.Output(2, fmt.Sprint(v...))
  93. }
  94. return
  95. }
  96. // Debugf implement core.ILogger
  97. func (s *SimpleLogger) Debugf(format string, v ...interface{}) {
  98. if s.level <= core.LOG_DEBUG {
  99. s.DEBUG.Output(2, fmt.Sprintf(format, v...))
  100. }
  101. return
  102. }
  103. // Info implement core.ILogger
  104. func (s *SimpleLogger) Info(v ...interface{}) {
  105. if s.level <= core.LOG_INFO {
  106. s.INFO.Output(2, fmt.Sprint(v...))
  107. }
  108. return
  109. }
  110. // Infof implement core.ILogger
  111. func (s *SimpleLogger) Infof(format string, v ...interface{}) {
  112. if s.level <= core.LOG_INFO {
  113. s.INFO.Output(2, fmt.Sprintf(format, v...))
  114. }
  115. return
  116. }
  117. // Warn implement core.ILogger
  118. func (s *SimpleLogger) Warn(v ...interface{}) {
  119. if s.level <= core.LOG_WARNING {
  120. s.WARN.Output(2, fmt.Sprint(v...))
  121. }
  122. return
  123. }
  124. // Warnf implement core.ILogger
  125. func (s *SimpleLogger) Warnf(format string, v ...interface{}) {
  126. if s.level <= core.LOG_WARNING {
  127. s.WARN.Output(2, fmt.Sprintf(format, v...))
  128. }
  129. return
  130. }
  131. // Level implement core.ILogger
  132. func (s *SimpleLogger) Level() core.LogLevel {
  133. return s.level
  134. }
  135. // SetLevel implement core.ILogger
  136. func (s *SimpleLogger) SetLevel(l core.LogLevel) {
  137. s.level = l
  138. return
  139. }
  140. // ShowSQL implement core.ILogger
  141. func (s *SimpleLogger) ShowSQL(show ...bool) {
  142. if len(show) == 0 {
  143. s.showSQL = true
  144. return
  145. }
  146. s.showSQL = show[0]
  147. }
  148. // IsShowSQL implement core.ILogger
  149. func (s *SimpleLogger) IsShowSQL() bool {
  150. return s.showSQL
  151. }