diff --git a/logger.go b/logger.go index 571583e..e65718f 100644 --- a/logger.go +++ b/logger.go @@ -4,6 +4,8 @@ import ( "fmt" "log" "os" + "path/filepath" + "runtime" ) // Logger interface is used throughout gorush @@ -19,9 +21,9 @@ type Logger interface { // NewLogger for simple logger. func NewLogger() Logger { return defaultLogger{ - infoLogger: log.New(os.Stderr, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile), - errorLogger: log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile), - fatalLogger: log.New(os.Stderr, "FATAL: ", log.Ldate|log.Ltime|log.Lshortfile), + infoLogger: log.New(os.Stderr, "INFO: ", log.Ldate|log.Ltime), + errorLogger: log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime), + fatalLogger: log.New(os.Stderr, "FATAL: ", log.Ldate|log.Ltime), } } @@ -35,12 +37,33 @@ func (l defaultLogger) Infof(format string, args ...interface{}) { l.infoLogger.Printf(format, args...) } +func (l defaultLogger) logWithCallerf(logger *log.Logger, format string, args ...interface{}) { + _, file, line, ok := runtime.Caller(2) + if ok { + shortFile := filepath.Base(file) + logger.Printf("%s:%d: %s", shortFile, line, fmt.Sprintf(format, args...)) + return + } + logger.Printf(format, args...) +} + +func (l defaultLogger) logWithCaller(logger *log.Logger, args ...interface{}) { + _, file, line, ok := runtime.Caller(2) + if ok { + shortFile := filepath.Base(file) + logger.Printf("%s:%d: %s", shortFile, line, fmt.Sprint(args...)) + return + } + logger.Println(fmt.Sprint(args...)) +} + func (l defaultLogger) Errorf(format string, args ...interface{}) { - l.errorLogger.Printf(format, args...) + l.logWithCallerf(l.errorLogger, format, args...) } func (l defaultLogger) Fatalf(format string, args ...interface{}) { - l.fatalLogger.Fatalf(format, args...) + l.logWithCallerf(l.fatalLogger, format, args...) + os.Exit(1) } func (l defaultLogger) Info(args ...interface{}) { @@ -48,11 +71,11 @@ func (l defaultLogger) Info(args ...interface{}) { } func (l defaultLogger) Error(args ...interface{}) { - l.errorLogger.Println(fmt.Sprint(args...)) + l.logWithCaller(l.errorLogger, args...) } func (l defaultLogger) Fatal(args ...interface{}) { - l.fatalLogger.Println(fmt.Sprint(args...)) + l.logWithCaller(l.fatalLogger, args...) os.Exit(1) }