...

Source file src/github.com/alibabacloud-go/tea/utils/logger.go

Documentation: github.com/alibabacloud-go/tea/utils

     1  package utils
     2  
     3  import (
     4  	"io"
     5  	"log"
     6  	"strings"
     7  	"time"
     8  )
     9  
    10  type Logger struct {
    11  	*log.Logger
    12  	formatTemplate string
    13  	isOpen         bool
    14  	lastLogMsg     string
    15  }
    16  
    17  var defaultLoggerTemplate = `{time} {channel}: "{method} {uri} HTTP/{version}" {code} {cost} {hostname}`
    18  var loggerParam = []string{"{time}", "{start_time}", "{ts}", "{channel}", "{pid}", "{host}", "{method}", "{uri}", "{version}", "{target}", "{hostname}", "{code}", "{error}", "{req_headers}", "{res_body}", "{res_headers}", "{cost}"}
    19  var logChannel string
    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  }
   110  

View as plain text