Merge pull request #58 from fluxcd/enhancement/logging

Setup production logging
This commit is contained in:
Stefan Prodan 2020-07-13 12:17:53 +03:00 committed by GitHub
commit 75879d11f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 5 deletions

View File

@ -39,6 +39,7 @@ spec:
path: /metrics
args:
- --enable-leader-election
- --log-level=debug
- --log-json
resources:
limits:

1
go.mod
View File

@ -8,6 +8,7 @@ require (
github.com/go-logr/logr v0.1.0
github.com/onsi/ginkgo v1.11.0
github.com/onsi/gomega v1.8.1
go.uber.org/zap v1.10.0
k8s.io/api v0.18.4
k8s.io/apimachinery v0.18.4
k8s.io/client-go v0.18.4

42
main.go
View File

@ -21,15 +21,19 @@ import (
"os"
"time"
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1alpha1"
"github.com/fluxcd/kustomize-controller/controllers"
"github.com/fluxcd/pkg/recorder"
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
"github.com/go-logr/logr"
uzap "go.uber.org/zap"
"go.uber.org/zap/zapcore"
"k8s.io/apimachinery/pkg/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1alpha1"
"github.com/fluxcd/kustomize-controller/controllers"
"github.com/fluxcd/pkg/recorder"
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
// +kubebuilder:scaffold:imports
)
@ -53,6 +57,7 @@ func main() {
enableLeaderElection bool
concurrent int
requeueDependency time.Duration
logLevel string
logJSON bool
)
@ -63,10 +68,11 @@ func main() {
"Enabling this will ensure there is only one active controller manager.")
flag.IntVar(&concurrent, "concurrent", 4, "The number of concurrent kustomize reconciles.")
flag.DurationVar(&requeueDependency, "requeue-dependency", 30*time.Second, "The interval at which failing dependencies are reevaluated.")
flag.StringVar(&logLevel, "log-level", "info", "Set logging level. Can be debug, info or error.")
flag.BoolVar(&logJSON, "log-json", false, "Set logging to JSON format.")
flag.Parse()
ctrl.SetLogger(zap.New(zap.UseDevMode(!logJSON)))
ctrl.SetLogger(newLogger(logLevel, logJSON))
var eventRecorder *recorder.EventRecorder
if eventsAddr != "" {
@ -120,3 +126,29 @@ func main() {
os.Exit(1)
}
}
// newLogger returns a logger configured for dev or production use.
// For production the log format is JSON, the timestamps format is ISO8601
// and stack traces are logged when the level is set to debug.
func newLogger(level string, production bool) logr.Logger {
if !production {
return zap.New(zap.UseDevMode(true))
}
encCfg := uzap.NewProductionEncoderConfig()
encCfg.EncodeTime = zapcore.ISO8601TimeEncoder
encoder := zap.Encoder(zapcore.NewJSONEncoder(encCfg))
logLevel := zap.Level(zapcore.InfoLevel)
stacktraceLevel := zap.StacktraceLevel(zapcore.PanicLevel)
switch level {
case "debug":
logLevel = zap.Level(zapcore.DebugLevel)
stacktraceLevel = zap.StacktraceLevel(zapcore.ErrorLevel)
case "error":
logLevel = zap.Level(zapcore.ErrorLevel)
}
return zap.New(encoder, logLevel, stacktraceLevel)
}