-
Notifications
You must be signed in to change notification settings - Fork 0
/
glog.go
59 lines (57 loc) · 2.3 KB
/
glog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Package golog is a simple logger that uses zerolog as the underlying logger.
//
// Basically it adds syntactic sugar to zerolog, to make it easier to use if it can be.
//
// Also, it adds some features that are not present in zerolog, like context fields. This context fields
// are fields that are added to every log message, and are stored globally. To store them, whe should add
// a value to the context that identifies the execution, e.g. a request id using the key stored on
// glog/context.ExecutionContextKey.
//
// This context isolation is useful when we want to add fields to every log message of a specific execution,
// and we have multiple executions running at the same time, e.g. multiple requests.
//
// If there is no context value stored, the context fields will not be added to the log messages.
//
// Example:
//
// import (
// "context"
// "github.com/danteay/golog"
// logcontext "github.com/danteay/golog/context"
// )
//
// func main() {
// ctx := context.WithValue(context.Background(), logcontext.ExecutionContextKey, "some-exec-id")
// logger := New(ctx, WithWriter(&logOutput), WithLevel(DebugLevel), Colored())
//
// logger.SetContextFields(map[string]any{
// "stage": "dev",
// "app-name": "some-name",
// })
//
// logger.Info("Hello %s", "world")
// // {"level":"info","message":"Hello world","stage":"dev","app-name":"some-name","time":"2020-01-01T00:00:00Z"}
//
// logger.Warn("This is a warning")
// // {"level":"warn","message":"This is a warning","stage":"dev","app-name":"some-name","time":"2020-01-01T00:00:00Z"}
//
// logger.Error("This is an error")
// // {"level":"error","message":"This is an error","stage":"dev","app-name":"some-name","time":"2020-01-01T00:00:00Z"}
//
// logger.FlushContextFields()
//
// logger.Info("Hello %s", "world")
// // {"level":"info","message":"Hello world","time":"2020-01-01T00:00:00Z"}
//
// logger.Warn("This is a warning")
// // {"level":"warn","message":"This is a warning","time":"2020-01-01T00:00:00Z"}
//
// logger.Error("This is an error")
// // {"level":"error","message":"This is an error","time":"2020-01-01T00:00:00Z"}
// }
package golog
import "github.com/danteay/golog/internal/contextfields"
// FlushAllContextFields removes all stored context fields.
func FlushAllContextFields() {
contextfields.FlushAll()
}