From 9296a87ac31b6a38d337ad2179bc46dc1eedf490 Mon Sep 17 00:00:00 2001 From: "MKCLINDIA\\onkars" <onkars@mkcl.org> Date: Fri, 21 Jul 2017 12:42:12 +0530 Subject: [PATCH] Logging Helper code change logger for console and file. --- authhelper/jwtHelper.go | 3 +- logginghelper/loggingHelper.go | 237 +++++++++++++++++++++++++++++++-- 2 files changed, 225 insertions(+), 15 deletions(-) diff --git a/authhelper/jwtHelper.go b/authhelper/jwtHelper.go index e3809d2..01c9f6b 100644 --- a/authhelper/jwtHelper.go +++ b/authhelper/jwtHelper.go @@ -35,7 +35,8 @@ func DecodeToken(tokenFromRequest string) (jwt.MapClaims, error) { // get data i.e.Claims from token token, err := jwt.Parse(tokenFromRequest, func(token *jwt.Token) (interface{}, error) { // Don't forget to validate the alg is what you expect: - if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { + _, ok := token.Method.(*jwt.SigningMethodRSA) + if !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return JwtKey, nil diff --git a/logginghelper/loggingHelper.go b/logginghelper/loggingHelper.go index 3bfdbd9..4de152b 100644 --- a/logginghelper/loggingHelper.go +++ b/logginghelper/loggingHelper.go @@ -1,46 +1,255 @@ package logginghelper import ( + "fmt" "os" + "runtime" + "strings" "github.com/sirupsen/logrus" ) var logger = logrus.New() +var consoleLogger = logrus.New() + +// Fields wraps logrus.Fields, which is a map[string]interface{} +type Fields logrus.Fields + +//Init Init Logger +func Init(fileName string) { + + customFormatter := new(logrus.TextFormatter) + customFormatter.TimestampFormat = "2006-01-02 15:04:05" -func init() { //log.Formatter = new(logger.JSONFormatter) - logger.Formatter = new(logrus.TextFormatter) // default + logger.Formatter = customFormatter // default logger.Level = logrus.InfoLevel - file, err := os.OpenFile("serverlogs.log", os.O_CREATE|os.O_APPEND, 0666) + + file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) + if err == nil { logger.Out = file } else { - logger.Error(err) + logger.Info("Failed to log to file, using default stderr") } + + //console logger + //log.Formatter = new(logger.JSONFormatter) + consoleLogger.Formatter = customFormatter // default + consoleLogger.Level = logrus.InfoLevel + consoleLogger.Out = os.Stdout + } -//LogDebug Log Debug messages +//SetLogLevel SetLogLevel +func SetLogLevel(level logrus.Level) { + logger.Level = level + consoleLogger.Level = level +} + +//SetLogFormatter SetLogFormatter +func SetLogFormatter(formatter logrus.Formatter) { + logger.Formatter = formatter + consoleLogger.Formatter = formatter +} + +// LogDebug logs a message at level Debug on the standard logger. func LogDebug(args ...interface{}) { - logger.Debug(args) + if logger.Level >= logrus.DebugLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Debug(args) + } + //console logger + if consoleLogger.Level >= logrus.DebugLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Debug(args) + } } -//LogInfo Logs Info messages +// LogDebugWithFields logs a message with fields at level Debug on the standard logger. +func LogDebugWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.DebugLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Debug(l) + } + + //console logger + if consoleLogger.Level >= logrus.DebugLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Debug(l) + } +} + +// LogInfo logs a message at level Info on the standard logger. func LogInfo(args ...interface{}) { - logger.Info(args) + if logger.Level >= logrus.InfoLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Info(args...) + } + + //console logger + if consoleLogger.Level >= logrus.InfoLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Info(args...) + } } -//LogWarn Logs Warning messages +// LogInfoWithFields logs a message with fields at level Debug on the standard logger. +func LogInfoWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.InfoLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Info(l) + } + + //console logger + if consoleLogger.Level >= logrus.InfoLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Info(l) + } +} + +// LogWarn logs a message at level Warn on the standard logger. func LogWarn(args ...interface{}) { - logger.Warn(args) + if logger.Level >= logrus.WarnLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Warn(args...) + } + + //console logger + if consoleLogger.Level >= logrus.WarnLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Warn(args...) + } } -//LogError Logs Error messages +// LogWarnWithFields logs a message with fields at level Debug on the standard logger. +func LogWarnWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.WarnLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Warn(l) + } + //console logger + if consoleLogger.Level >= logrus.WarnLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Warn(l) + } + +} + +// LogError logs a message at level Error on the standard logger. func LogError(args ...interface{}) { - logger.Error(args) + if logger.Level >= logrus.ErrorLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Error(args...) + } + //console logger + + if consoleLogger.Level >= logrus.ErrorLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Error(args...) + } +} + +// LogErrorWithFields logs a message with fields at level Debug on the standard logger. +func LogErrorWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.ErrorLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Error(l) + } + //console logger + if consoleLogger.Level >= logrus.ErrorLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Error(l) + } +} + +// LogFatal logs a message at level Fatal on the standard logger. +func LogFatal(args ...interface{}) { + if logger.Level >= logrus.FatalLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Fatal(args...) + } + //console logger + if consoleLogger.Level >= logrus.FatalLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Fatal(args...) + } } -//LogPanic Logs Panic messages +// LogFatalWithFields logs a message with fields at level Debug on the standard logger. +func LogFatalWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.FatalLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Fatal(l) + } + //console logger + if consoleLogger.Level >= logrus.FatalLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Fatal(l) + } + +} + +// Panic logs a message at level Panic on the standard logger. func LogPanic(args ...interface{}) { - logger.Panic(args) + if logger.Level >= logrus.PanicLevel { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Panic(args...) + } + //console logger + if consoleLogger.Level >= logrus.PanicLevel { + entry := consoleLogger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Panic(args...) + } +} + +// LogPanicWithFields logs a message with fields at level Debug on the standard logger. +func LogPanicWithFields(l interface{}, f Fields) { + if logger.Level >= logrus.PanicLevel { + entry := logger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Panic(l) + } + //console logger + if consoleLogger.Level >= logrus.PanicLevel { + entry := consoleLogger.WithFields(logrus.Fields(f)) + entry.Data["file"] = fileInfo(2) + entry.Panic(l) + } +} + +func fileInfo(skip int) string { + _, file, line, ok := runtime.Caller(skip) + if !ok { + file = "<???>" + line = 1 + } else { + slash := strings.LastIndex(file, "/") + if slash >= 0 { + file = file[slash+1:] + } + } + return fmt.Sprintf("%s:%d", file, line) } -- GitLab