log.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package logger
  2. import (
  3. "dsbqj-admin/pkg/file"
  4. "fmt"
  5. "github.com/fatih/color"
  6. "log"
  7. "os"
  8. "path/filepath"
  9. "runtime"
  10. "time"
  11. )
  12. type Level int
  13. var (
  14. F *os.File
  15. F2 *os.File
  16. DefaultPrefix = ""
  17. DefaultCallerDepth = 2
  18. logger *log.Logger
  19. debug *log.Logger
  20. logPrefix = ""
  21. levelFlags = []string{"DEBUG", "INFO", "WARN", "ERROR", "FATAL"}
  22. logMod = ""
  23. )
  24. var colors = map[string]func(a ...interface{}) string{
  25. "Warning": color.New(color.FgYellow).Add(color.Bold).SprintFunc(),
  26. "Panic": color.New(color.BgRed).Add(color.Bold).SprintFunc(),
  27. "Error": color.New(color.FgRed).Add(color.Bold).SprintFunc(),
  28. "Info": color.New(color.FgCyan).Add(color.Bold).SprintFunc(),
  29. "Debug": color.New(color.FgWhite).Add(color.Bold).SprintFunc(),
  30. }
  31. var spaces = map[string]string{
  32. "Warning": "",
  33. "Panic": " ",
  34. "Error": " ",
  35. "Info": " ",
  36. "Debug": " ",
  37. }
  38. const (
  39. DEBUG Level = iota
  40. INFO
  41. WARNING
  42. ERROR
  43. FATAL
  44. )
  45. // Setup initialize the log instance
  46. func Init(tag string) {
  47. var err error
  48. filePath := getLogFilePath()
  49. fileName := tag + getLogFileName()
  50. logMod = os.Getenv("GIN_MODE")
  51. F, err = file.MustOpen(fileName, filePath)
  52. if err != nil {
  53. log.Fatalf("logging.Setup err: %v", err)
  54. }
  55. logger = log.New(F, DefaultPrefix, log.LstdFlags)
  56. F2, err = file.MustOpen("debug", filePath)
  57. if err != nil {
  58. log.Fatalf("logging.Setup err: %v", err)
  59. }
  60. debug = log.New(F2, DefaultPrefix, log.LstdFlags)
  61. // 这里启动一个携程去定时检测当前时间 是否是同一天
  62. go func() {
  63. for {
  64. last := time.Now().Format(os.Getenv("TIME_FORMAT"))
  65. time.Sleep(1 * time.Second)
  66. now := time.Now().Format(os.Getenv("TIME_FORMAT"))
  67. if last != now {
  68. filePath := getLogFilePath()
  69. fileName := tag + getLogFileName()
  70. F, err = file.MustOpen(fileName, filePath)
  71. if err != nil {
  72. log.Fatalf("logging.Setup err: %v", err)
  73. }
  74. logger = log.New(F, DefaultPrefix, log.LstdFlags)
  75. }
  76. }
  77. }()
  78. }
  79. //func checkDate() {
  80. // curDate := time.Now().Format(os.Getenv("TIME_FORMAT"))
  81. // if lastDate != curDate {
  82. // Init()
  83. // }
  84. //}
  85. func File(fileName, msg string) {
  86. filePath := getLogFilePath()
  87. logMod = os.Getenv("GIN_MODE")
  88. f, err := file.MustOpen(fileName, filePath)
  89. if err != nil {
  90. log.Fatalf("logging.Setup err: %v", err)
  91. }
  92. logger := log.New(f, DefaultPrefix, log.LstdFlags)
  93. logger.Println(msg)
  94. }
  95. // Debug output logs at debug level
  96. func Debug(format string, v ...interface{}) {
  97. setPrefix(DEBUG)
  98. msg := fmt.Sprintf(format, v...)
  99. if logMod == "debug" {
  100. Println("Debug", msg)
  101. }
  102. debug.Println(msg)
  103. }
  104. // Info output logs at info level
  105. func Info(format string, v ...interface{}) {
  106. setPrefix(INFO)
  107. msg := fmt.Sprintf(format, v...)
  108. Println("Info", msg)
  109. logger.Println(msg)
  110. }
  111. // Warn output logs at warn level
  112. func Warn(format string, v ...interface{}) {
  113. setPrefix(WARNING)
  114. msg := fmt.Sprintf(format, v...)
  115. if logMod == "debug" {
  116. Println("Warning", msg)
  117. }
  118. logger.Println(msg)
  119. }
  120. // Error output logs at error level
  121. func Error(format string, v ...interface{}) {
  122. setPrefix(ERROR)
  123. msg := fmt.Sprintf(format, v...)
  124. if logMod == "debug" {
  125. Println("Error", msg)
  126. }
  127. logger.Println(msg)
  128. }
  129. // Fatal output logs at fatal level
  130. func Fatal(format string, v ...interface{}) {
  131. setPrefix(FATAL)
  132. logger.Fatalln(v)
  133. }
  134. func Println(prefix string, msg string) {
  135. // TODO Release时去掉
  136. c := color.New()
  137. _, _ = c.Printf(
  138. "%s%s %s %s\n",
  139. colors[prefix]("["+prefix+"]"),
  140. spaces[prefix],
  141. time.Now().Format("2006-01-02 15:04:05"),
  142. msg,
  143. )
  144. }
  145. // setPrefix set the prefix of the log output
  146. func setPrefix(level Level) {
  147. _, file, line, ok := runtime.Caller(DefaultCallerDepth)
  148. if ok {
  149. logPrefix = fmt.Sprintf("[%s][%s:%d]", levelFlags[level], filepath.Base(file), line)
  150. } else {
  151. logPrefix = fmt.Sprintf("[%s]", levelFlags[level])
  152. }
  153. logger.SetPrefix(logPrefix)
  154. //checkDate()
  155. }