浏览代码

Merge pull request #5 from o1egl/add_variadic_params

add variadic params to logging methods
Vishal Rana 9 年之前
父节点
当前提交
144de14a2c
共有 2 个文件被更改,包括 58 次插入27 次删除
  1. 27 27
      log/log.go
  2. 31 0
      log/log_test.go

+ 27 - 27
log/log.go

@@ -68,8 +68,8 @@ func (l *Logger) SetOutput(w io.Writer) {
 	initLevels()
 }
 
-func (l *Logger) Print(i interface{}) {
-	fmt.Println(i)
+func (l *Logger) Print(i ...interface{}) {
+	fmt.Println(i...)
 }
 
 func (l *Logger) Printf(format string, args ...interface{}) {
@@ -77,40 +77,40 @@ func (l *Logger) Printf(format string, args ...interface{}) {
 	fmt.Fprintf(l.out, f, args...)
 }
 
-func (l *Logger) Debug(i interface{}) {
-	l.log(DEBUG, i)
+func (l *Logger) Debug(i ...interface{}) {
+	l.log(DEBUG, "", i...)
 }
 
 func (l *Logger) Debugf(format string, args ...interface{}) {
 	l.log(DEBUG, format, args...)
 }
 
-func (l *Logger) Info(i interface{}) {
-	l.log(INFO, i)
+func (l *Logger) Info(i ...interface{}) {
+	l.log(INFO, "", i...)
 }
 
 func (l *Logger) Infof(format string, args ...interface{}) {
 	l.log(INFO, format, args...)
 }
 
-func (l *Logger) Warn(i interface{}) {
-	l.log(WARN, i)
+func (l *Logger) Warn(i ...interface{}) {
+	l.log(WARN, "", i...)
 }
 
 func (l *Logger) Warnf(format string, args ...interface{}) {
 	l.log(WARN, format, args...)
 }
 
-func (l *Logger) Error(i interface{}) {
-	l.log(ERROR, i)
+func (l *Logger) Error(i ...interface{}) {
+	l.log(ERROR, "", i...)
 }
 
 func (l *Logger) Errorf(format string, args ...interface{}) {
 	l.log(ERROR, format, args...)
 }
 
-func (l *Logger) Fatal(i interface{}) {
-	l.log(FATAL, i)
+func (l *Logger) Fatal(i ...interface{}) {
+	l.log(FATAL, "", i...)
 	os.Exit(1)
 }
 
@@ -131,61 +131,61 @@ func SetOutput(w io.Writer) {
 	global.SetOutput(w)
 }
 
-func Print(i interface{}) {
-	global.Print(i)
+func Print(i ...interface{}) {
+	global.Print(i...)
 }
 
 func Printf(format string, args ...interface{}) {
 	global.Printf(format, args...)
 }
 
-func Debug(i interface{}) {
-	global.Debug(i)
+func Debug(i ...interface{}) {
+	global.Debug(i...)
 }
 
 func Debugf(format string, args ...interface{}) {
 	global.Debugf(format, args...)
 }
 
-func Info(i interface{}) {
-	global.Info(i)
+func Info(i ...interface{}) {
+	global.Info(i...)
 }
 
 func Infof(format string, args ...interface{}) {
 	global.Infof(format, args...)
 }
 
-func Warn(i interface{}) {
-	global.Warn(i)
+func Warn(i ...interface{}) {
+	global.Warn(i...)
 }
 
 func Warnf(format string, args ...interface{}) {
 	global.Warnf(format, args...)
 }
 
-func Error(i interface{}) {
-	global.Error(i)
+func Error(i ...interface{}) {
+	global.Error(i...)
 }
 
 func Errorf(format string, args ...interface{}) {
 	global.Errorf(format, args...)
 }
 
-func Fatal(i interface{}) {
-	global.Fatal(i)
+func Fatal(i ...interface{}) {
+	global.Fatal(i...)
 }
 
 func Fatalf(format string, args ...interface{}) {
 	global.Fatalf(format, args...)
 }
 
-func (l *Logger) log(v Level, format interface{}, args ...interface{}) {
+func (l *Logger) log(v Level, format string, args ...interface{}) {
 	l.mu.Lock()
 	defer l.mu.Unlock()
 
 	if v >= l.level {
-		if len(args) == 0 {
-			fmt.Println(format)
+		if format == "" {
+			fmt.Println(args...)
 		} else {
 			// TODO: Improve performance
 			f := fmt.Sprintf("%s|%s|%v\n", levels[v], l.prefix, format)

+ 31 - 0
log/log_test.go

@@ -5,6 +5,8 @@ import (
 	"testing"
 
 	"github.com/stretchr/testify/assert"
+	"os"
+	"os/exec"
 )
 
 func TestLog(t *testing.T) {
@@ -26,6 +28,35 @@ func TestLog(t *testing.T) {
 	// assert.Contains(t, b.String(), "fatal")
 }
 
+func TestFatal(t *testing.T) {
+	l := New("test")
+	switch os.Getenv("TEST_LOGGER_FATAL") {
+	case "fatal":
+		l.Fatal("fatal")
+		return
+	case "fatalf":
+		l.Fatalf("fatal-%s", "f")
+		return
+	}
+
+	loggerFatalTest(t, "fatal", "fatal")
+	loggerFatalTest(t, "fatalf", "fatal-f")
+}
+
+func loggerFatalTest(t *testing.T, env string, contains string) {
+	buf := new(bytes.Buffer)
+	cmd := exec.Command(os.Args[0], "-test.run=TestFatal")
+	cmd.Env = append(os.Environ(), "TEST_LOGGER_FATAL="+env)
+	cmd.Stdout = buf
+	cmd.Stderr = buf
+	err := cmd.Run()
+	if e, ok := err.(*exec.ExitError); ok && !e.Success() {
+		assert.Contains(t, buf.String(), contains)
+		return
+	}
+	t.Fatalf("process ran with err %v, want exit status 1", err)
+}
+
 func test(l *Logger, v Level, t *testing.T) {
 	l.SetLevel(v)
 	l.Print("print")