forked from CrunchyData/postgres-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
logr.go
61 lines (48 loc) · 2.05 KB
/
logr.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
60
61
/*
Copyright 2021 - 2022 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package logging
import (
"context"
"github.com/go-logr/logr"
"github.com/wojas/genericr"
"go.opentelemetry.io/otel/trace"
)
var global = logr.Discard()
// Discard returns a logr.Logger that discards all messages logged to it.
func Discard() logr.Logger { return logr.DiscardLogger{} }
// SetLogFunc replaces the global logr.Logger with log that gets called when an
// entry's level is at or below verbosity. (Only the most important entries are
// passed when verbosity is zero.) Before this is called, the global logr.Logger
// is a no-op.
func SetLogFunc(verbosity int, log genericr.LogFunc) {
global = genericr.New(log).WithCaller(true).WithVerbosity(verbosity)
}
// NewContext returns a copy of ctx containing logger. Retrieve it using FromContext.
func NewContext(ctx context.Context, logger logr.Logger) context.Context {
return logr.NewContext(ctx, logger)
}
// FromContext returns the global logr.Logger or the one stored by a prior call
// to NewContext.
func FromContext(ctx context.Context) logr.Logger {
var log logr.Logger
if log = logr.FromContext(ctx); log == nil {
log = global
}
// Add trace context, if any, according to OpenTelemetry recommendations.
// Omit trace flags for now because they don't seem relevant.
// - https://github.com/open-telemetry/opentelemetry-specification/blob/v0.7.0/specification/logs/overview.md
if sc := trace.SpanFromContext(ctx).SpanContext(); sc.IsValid() {
log = log.WithValues("spanid", sc.SpanID(), "traceid", sc.TraceID())
}
return log
}