logger.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package utils
  2. import (
  3. "io"
  4. "log"
  5. "strings"
  6. "time"
  7. )
  8. var defaultLoggerTemplate = `{time} {channel}: "{method} {uri} HTTP/{version}" {code} {cost} {hostname}`
  9. var loggerParam = []string{"{time}", "{start_time}", "{ts}", "{channel}", "{pid}", "{host}", "{method}", "{uri}", "{version}", "{target}", "{hostname}", "{code}", "{error}", "{req_headers}", "{res_body}", "{res_headers}", "{cost}"}
  10. var logChannel string
  11. type Logger struct {
  12. *log.Logger
  13. formatTemplate string
  14. isOpen bool
  15. lastLogMsg string
  16. }
  17. func InitLogMsg(fieldMap map[string]string) {
  18. for _, value := range loggerParam {
  19. fieldMap[value] = ""
  20. }
  21. }
  22. func (logger *Logger) SetFormatTemplate(template string) {
  23. logger.formatTemplate = template
  24. }
  25. func (logger *Logger) GetFormatTemplate() string {
  26. return logger.formatTemplate
  27. }
  28. func NewLogger(level string, channel string, out io.Writer, template string) *Logger {
  29. if level == "" {
  30. level = "info"
  31. }
  32. logChannel = "AlibabaCloud"
  33. if channel != "" {
  34. logChannel = channel
  35. }
  36. log := log.New(out, "["+strings.ToUpper(level)+"]", log.Lshortfile)
  37. if template == "" {
  38. template = defaultLoggerTemplate
  39. }
  40. return &Logger{
  41. Logger: log,
  42. formatTemplate: template,
  43. isOpen: true,
  44. }
  45. }
  46. func (logger *Logger) OpenLogger() {
  47. logger.isOpen = true
  48. }
  49. func (logger *Logger) CloseLogger() {
  50. logger.isOpen = false
  51. }
  52. func (logger *Logger) SetIsopen(isopen bool) {
  53. logger.isOpen = isopen
  54. }
  55. func (logger *Logger) GetIsopen() bool {
  56. return logger.isOpen
  57. }
  58. func (logger *Logger) SetLastLogMsg(lastLogMsg string) {
  59. logger.lastLogMsg = lastLogMsg
  60. }
  61. func (logger *Logger) GetLastLogMsg() string {
  62. return logger.lastLogMsg
  63. }
  64. func SetLogChannel(channel string) {
  65. logChannel = channel
  66. }
  67. func (logger *Logger) PrintLog(fieldMap map[string]string, err error) {
  68. if err != nil {
  69. fieldMap["{error}"] = err.Error()
  70. }
  71. fieldMap["{time}"] = time.Now().Format("2006-01-02 15:04:05")
  72. fieldMap["{ts}"] = getTimeInFormatISO8601()
  73. fieldMap["{channel}"] = logChannel
  74. if logger != nil {
  75. logMsg := logger.formatTemplate
  76. for key, value := range fieldMap {
  77. logMsg = strings.Replace(logMsg, key, value, -1)
  78. }
  79. logger.lastLogMsg = logMsg
  80. if logger.isOpen == true {
  81. logger.Output(2, logMsg)
  82. }
  83. }
  84. }
  85. func getTimeInFormatISO8601() (timeStr string) {
  86. gmt := time.FixedZone("GMT", 0)
  87. return time.Now().In(gmt).Format("2006-01-02T15:04:05Z")
  88. }