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