diff --git a/Gopkg.lock b/Gopkg.lock index 429b3d413..719379d2c 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -838,7 +838,7 @@ revision = "581e00157fb1a0435d4fac54a52d1ca1e481d60e" [[projects]] - digest = "1:17128a8b8ad758f567eaf89104ef8e36fa0b611fc10852cbfe63699c741a7618" + digest = "1:cab4474fd49acdab99a048725044f2563e8b3a69d8daa3d2f3175a8182c02f84" name = "sigs.k8s.io/controller-runtime" packages = [ "pkg/cache", @@ -871,8 +871,8 @@ "pkg/webhook/internal/metrics", ] pruneopts = "UT" - revision = "eb94491f7ac37f163aef146cf3c17f87d21ae184" - version = "v0.2.0-beta.5" + revision = "fc5542c693e3340f8abbe91c6345bd64c494a60c" + version = "v0.2.2" [[projects]] digest = "1:608ec00545532185775097db32734be2fc0d88ead84250db3a9c5b86024d8ec2" @@ -923,6 +923,7 @@ "github.com/google/go-cmp/cmp/cmpopts", "github.com/onsi/gomega", "github.com/pkg/errors", + "go.uber.org/zap", "golang.org/x/tools/cmd/stringer", "k8s.io/api/apps/v1", "k8s.io/api/core/v1", @@ -947,6 +948,7 @@ "sigs.k8s.io/controller-runtime/pkg/envtest", "sigs.k8s.io/controller-runtime/pkg/event", "sigs.k8s.io/controller-runtime/pkg/handler", + "sigs.k8s.io/controller-runtime/pkg/log/zap", "sigs.k8s.io/controller-runtime/pkg/manager", "sigs.k8s.io/controller-runtime/pkg/predicate", "sigs.k8s.io/controller-runtime/pkg/reconcile", diff --git a/Gopkg.toml b/Gopkg.toml index 157f81c46..66f73c1f9 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -46,3 +46,6 @@ required = [ source = "https://github.com/fsnotify/fsnotify.git" version="v1.4.7" +[[constraint]] + name="sigs.k8s.io/controller-runtime" + version="v0.2.2" diff --git a/pkg/logging/logging.go b/pkg/logging/logging.go index 86076892a..752d53e04 100644 --- a/pkg/logging/logging.go +++ b/pkg/logging/logging.go @@ -20,6 +20,8 @@ package logging import ( "github.com/go-logr/logr" + "go.uber.org/zap" + runtimezap "sigs.k8s.io/controller-runtime/pkg/log/zap" runtimelog "sigs.k8s.io/controller-runtime/pkg/runtime/log" ) @@ -34,8 +36,29 @@ var ( // Logger is the base logger used by Crossplane. It delegates to another // logr.Logger. You *must* call SetLogger to get any actual logging. Logger = logger.WithName("crossplane") + + // ZapLogger is a Logger implementation. + ZapLogger = zapLogger ) +// zapLogger is Logger implementation of controller runtime. +// If development is true, a Zap development config will be used +// (stacktraces on warnings, no sampling), otherwise a Zap production +// config will be used (stacktraces on errors, sampling). +// If disableStacktrace is true, stacktraces enabled on fatals +// independent of config. +func zapLogger(development bool, disableStacktrace bool) logr.Logger { + o := func(o *runtimezap.Options) { + o.Development = development + if disableStacktrace { + lvl := zap.NewAtomicLevelAt(zap.FatalLevel) + o.StacktraceLevel = &lvl + } + } + + return runtimezap.New(o) +} + // SetLogger sets a concrete logging implementation for all deferred Loggers. func SetLogger(l logr.Logger) { logger.Fulfill(l)