138 lines
2.7 KiB
Go
138 lines
2.7 KiB
Go
|
package log_test
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"os"
|
||
|
"sync"
|
||
|
"time"
|
||
|
|
||
|
"github.com/go-kit/kit/log"
|
||
|
)
|
||
|
|
||
|
func Example_basic() {
|
||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||
|
|
||
|
type Task struct {
|
||
|
ID int
|
||
|
}
|
||
|
|
||
|
RunTask := func(task Task, logger log.Logger) {
|
||
|
logger.Log("taskID", task.ID, "event", "starting task")
|
||
|
|
||
|
logger.Log("taskID", task.ID, "event", "task complete")
|
||
|
}
|
||
|
|
||
|
RunTask(Task{ID: 1}, logger)
|
||
|
|
||
|
// Output:
|
||
|
// taskID=1 event="starting task"
|
||
|
// taskID=1 event="task complete"
|
||
|
}
|
||
|
|
||
|
func Example_contextual() {
|
||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||
|
|
||
|
type Task struct {
|
||
|
ID int
|
||
|
Cmd string
|
||
|
}
|
||
|
|
||
|
taskHelper := func(cmd string, logger log.Logger) {
|
||
|
// execute(cmd)
|
||
|
logger.Log("cmd", cmd, "dur", 42*time.Millisecond)
|
||
|
}
|
||
|
|
||
|
RunTask := func(task Task, logger log.Logger) {
|
||
|
logger = log.With(logger, "taskID", task.ID)
|
||
|
logger.Log("event", "starting task")
|
||
|
|
||
|
taskHelper(task.Cmd, logger)
|
||
|
|
||
|
logger.Log("event", "task complete")
|
||
|
}
|
||
|
|
||
|
RunTask(Task{ID: 1, Cmd: "echo Hello, world!"}, logger)
|
||
|
|
||
|
// Output:
|
||
|
// taskID=1 event="starting task"
|
||
|
// taskID=1 cmd="echo Hello, world!" dur=42ms
|
||
|
// taskID=1 event="task complete"
|
||
|
}
|
||
|
|
||
|
func Example_valuer() {
|
||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||
|
|
||
|
count := 0
|
||
|
counter := func() interface{} {
|
||
|
count++
|
||
|
return count
|
||
|
}
|
||
|
|
||
|
logger = log.With(logger, "count", log.Valuer(counter))
|
||
|
|
||
|
logger.Log("call", "first")
|
||
|
logger.Log("call", "second")
|
||
|
|
||
|
// Output:
|
||
|
// count=1 call=first
|
||
|
// count=2 call=second
|
||
|
}
|
||
|
|
||
|
func Example_debugInfo() {
|
||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||
|
|
||
|
// make time predictable for this test
|
||
|
baseTime := time.Date(2015, time.February, 3, 10, 0, 0, 0, time.UTC)
|
||
|
mockTime := func() time.Time {
|
||
|
baseTime = baseTime.Add(time.Second)
|
||
|
return baseTime
|
||
|
}
|
||
|
|
||
|
logger = log.With(logger, "time", log.Timestamp(mockTime), "caller", log.DefaultCaller)
|
||
|
|
||
|
logger.Log("call", "first")
|
||
|
logger.Log("call", "second")
|
||
|
|
||
|
// ...
|
||
|
|
||
|
logger.Log("call", "third")
|
||
|
|
||
|
// Output:
|
||
|
// time=2015-02-03T10:00:01Z caller=example_test.go:93 call=first
|
||
|
// time=2015-02-03T10:00:02Z caller=example_test.go:94 call=second
|
||
|
// time=2015-02-03T10:00:03Z caller=example_test.go:98 call=third
|
||
|
}
|
||
|
|
||
|
func Example_syncWriter() {
|
||
|
w := log.NewSyncWriter(os.Stdout)
|
||
|
logger := log.NewLogfmtLogger(w)
|
||
|
|
||
|
type Task struct {
|
||
|
ID int
|
||
|
}
|
||
|
|
||
|
var wg sync.WaitGroup
|
||
|
|
||
|
RunTask := func(task Task, logger log.Logger) {
|
||
|
logger.Log("taskID", task.ID, "event", "starting task")
|
||
|
|
||
|
time.Sleep(time.Duration(rand.Intn(200)) * time.Millisecond)
|
||
|
|
||
|
logger.Log("taskID", task.ID, "event", "task complete")
|
||
|
wg.Done()
|
||
|
}
|
||
|
|
||
|
wg.Add(2)
|
||
|
|
||
|
go RunTask(Task{ID: 1}, logger)
|
||
|
go RunTask(Task{ID: 2}, logger)
|
||
|
|
||
|
wg.Wait()
|
||
|
|
||
|
// Unordered output:
|
||
|
// taskID=1 event="starting task"
|
||
|
// taskID=2 event="starting task"
|
||
|
// taskID=1 event="task complete"
|
||
|
// taskID=2 event="task complete"
|
||
|
}
|