logger.go (64 lines of code) (raw):

package sls import ( "os" "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" "gopkg.in/natefinch/lumberjack.v2" ) var Logger = initDefaultSLSLogger() func initDefaultSLSLogger() log.Logger { logFileName := os.Getenv("SLS_GO_SDK_LOG_FILE_NAME") isJsonType := os.Getenv("SLS_GO_SDK_IS_JSON_TYPE") logMaxSize := os.Getenv("SLS_GO_SDK_LOG_MAX_SIZE") logFileBackupCount := os.Getenv("SLS_GO_SDK_LOG_FILE_BACKUP_COUNT") allowLogLevel := os.Getenv("SLS_GO_SDK_ALLOW_LOG_LEVEL") return GenerateInnerLogger(logFileName, isJsonType, logMaxSize, logFileBackupCount, allowLogLevel) } func GenerateInnerLogger(logFileName, isJsonType, logMaxSize, logFileBackupCount, allowLogLevel string) log.Logger { var logger log.Logger if logFileName == "" { logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stdout)) return logger } else if logFileName == "stdout" { if isJsonType == "true" { logger = log.NewLogfmtLogger(initLogFlusher(logFileBackupCount, logMaxSize, logFileName)) } else { logger = log.NewJSONLogger(initLogFlusher(logFileBackupCount, logMaxSize, logFileName)) } } else if logFileName != "stdout" { if isJsonType == "true" { logger = log.NewJSONLogger(log.NewSyncWriter(os.Stdout)) } else { logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stdout)) } } switch allowLogLevel { case "debug": logger = level.NewFilter(logger, level.AllowDebug()) case "info": logger = level.NewFilter(logger, level.AllowInfo()) case "warn": logger = level.NewFilter(logger, level.AllowWarn()) case "error": logger = level.NewFilter(logger, level.AllowError()) default: logger = level.NewFilter(logger, level.AllowInfo()) } logger = log.With(logger, "time", log.DefaultTimestampUTC, "caller", log.DefaultCaller) return logger } func initLogFlusher(logFileBackupCount, logMaxSize, logFileName string) *lumberjack.Logger { var newLogMaxSize, newLogFileBackupCount int if logMaxSize == "0" { newLogMaxSize = 10 } if logFileBackupCount == "0" { newLogFileBackupCount = 10 } return &lumberjack.Logger{ Filename: logFileName, MaxSize: newLogMaxSize, MaxBackups: newLogFileBackupCount, Compress: true, } }