parent
e335c1304a
commit
21557b38f6
@ -0,0 +1,30 @@ |
||||
package log |
||||
|
||||
import ( |
||||
"runtime" |
||||
"strconv" |
||||
"strings" |
||||
) |
||||
|
||||
// Valuer is returns a log value.
|
||||
type Valuer func() interface{} |
||||
|
||||
// Value return the function value.
|
||||
func Value(v interface{}) interface{} { |
||||
if v, ok := v.(Valuer); ok { |
||||
return v() |
||||
} |
||||
return v |
||||
} |
||||
|
||||
// Caller returns returns a Valuer that returns a pkg/file:line description of the caller.
|
||||
func Caller(depth int) Valuer { |
||||
return func() interface{} { |
||||
_, file, line, ok := runtime.Caller(depth) |
||||
if !ok { |
||||
return nil |
||||
} |
||||
idx := strings.LastIndexByte(file, '/') |
||||
return file[idx+1:] + ":" + strconv.Itoa(line) |
||||
} |
||||
} |
@ -0,0 +1,8 @@ |
||||
package log |
||||
|
||||
import "testing" |
||||
|
||||
func TestValue(t *testing.T) { |
||||
logger := With(DefaultLogger, "caller", Caller(4)) |
||||
logger.Print("message", "helloworld") |
||||
} |
@ -1,14 +0,0 @@ |
||||
package log |
||||
|
||||
type wrapper []Logger |
||||
|
||||
func (w wrapper) Print(pairs ...interface{}) { |
||||
for _, p := range w { |
||||
p.Print(pairs...) |
||||
} |
||||
} |
||||
|
||||
// Wrap wraps multi logger.
|
||||
func Wrap(l ...Logger) Logger { |
||||
return wrapper(l) |
||||
} |
@ -1,14 +0,0 @@ |
||||
package log |
||||
|
||||
import ( |
||||
"os" |
||||
"testing" |
||||
) |
||||
|
||||
func TestWrapper(t *testing.T) { |
||||
out := NewStdLogger(os.Stdout) |
||||
err := NewStdLogger(os.Stderr) |
||||
|
||||
l := Wrap(out, err) |
||||
l.Print("message", "test") |
||||
} |
Loading…
Reference in new issue