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