package logs import ( "fmt" "os" "path/filepath" "time" "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus" ) // LogUTCFormatter helps in setting UTC time format for the logs type LogUTCFormatter struct { log.Formatter } // Format helps formatting time to UTC func (u LogUTCFormatter) Format(e *log.Entry) ([]byte, error) { e.Time = e.Time.UTC() file := filepath.Base(e.Caller.File) return []byte(fmt.Sprintf("[%s] %s:%d %s\n", e.Time.Format(time.RFC3339), file, e.Caller.Line, e.Message)), nil } func InitLog(cliLogLevel string) *log.Logger { // log instance for the gin server log := logrus.New() log.SetFormatter(LogUTCFormatter{&logrus.TextFormatter{}}) if cliLogLevel == "" { cliLogLevel = os.Getenv("LOG_LEVEL") } var logLevel logrus.Level switch cliLogLevel { case "debug": logLevel = logrus.DebugLevel case "info": logLevel = logrus.InfoLevel case "warn": logLevel = logrus.WarnLevel case "error": logLevel = logrus.ErrorLevel case "fatal": logLevel = logrus.FatalLevel case "panic": logLevel = logrus.PanicLevel default: logLevel = logrus.InfoLevel } // set log level globally logrus.SetLevel(logLevel) // set log level for go-gin middleware log.SetLevel(logLevel) // show file path in log for debug or other log levels. if logLevel != logrus.InfoLevel { logrus.SetReportCaller(true) log.SetReportCaller(true) } return log }