瀏覽代碼

Added file and line number to logging format

Signed-off-by: Vishal Rana <vr@labstack.com>
Vishal Rana 9 年之前
父節點
當前提交
72b840d1a9
共有 2 個文件被更改,包括 16 次插入5 次删除
  1. 12 1
      log/log.go
  2. 4 4
      log/log_test.go

+ 12 - 1
log/log.go

@@ -4,9 +4,13 @@ import (
 	"fmt"
 	"io"
 	"os"
+	"path"
+	"runtime"
 	"sync"
 	"time"
 
+	"strconv"
+
 	"github.com/mattn/go-colorable"
 	"github.com/mattn/go-isatty"
 	"github.com/valyala/fasttemplate"
@@ -37,7 +41,8 @@ const (
 
 var (
 	global        = New("-")
-	defaultFormat = "time=${time_rfc3339}, level=${level}, prefix=${prefix}, ${message}\n"
+	defaultFormat = "time=${time_rfc3339}, level=${level}, prefix=${prefix}, file=${file}, " +
+		"line=${line}, ${message}\n"
 )
 
 func New(prefix string) (l *Logger) {
@@ -246,6 +251,8 @@ func (l *Logger) log(v uint8, format string, args ...interface{}) {
 	l.mutex.Lock()
 	defer l.mutex.Unlock()
 
+	_, file, line, _ := runtime.Caller(2)
+
 	if v >= l.level {
 		message := ""
 		if format == "" {
@@ -261,6 +268,10 @@ func (l *Logger) log(v uint8, format string, args ...interface{}) {
 				return w.Write([]byte(l.levels[v]))
 			case "prefix":
 				return w.Write([]byte(l.prefix))
+			case "file":
+				return w.Write([]byte(path.Base(file)))
+			case "line":
+				return w.Write([]byte(strconv.Itoa(line)))
 			case "message":
 				return w.Write([]byte(message))
 			default:

+ 4 - 4
log/log_test.go

@@ -33,10 +33,10 @@ func test(l *Logger, t *testing.T) {
 	assert.NotContains(t, b.String(), "debugf")
 	assert.NotContains(t, b.String(), "info")
 	assert.NotContains(t, b.String(), "infof")
-	assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix+", warn")
-	assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix+", warnf")
-	assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix+", error")
-	assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix+", errorf")
+	assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix)
+	assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix)
+	assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix)
+	assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix)
 }
 
 func TestLog(t *testing.T) {