Skip to content

Commit

Permalink
logger, controllers: use common logging level, INFO by default (#1289)
Browse files Browse the repository at this point in the history
Remove increasing logging level for controllers (it was also passed
to components if not overridden from DSCI) since:

- it made logging inconsistent. The base contoller runtime logger is
set up with INFO level for all log modes, so when controllers are
configured for Error level, user sees INFO messages from both
controller-runtime and other parts of operator which use
controller-runtime's logger directly;

- since the base logger is configured for INFO, there is no
difference in levels between "default" and "devel". Having levels 1
and 2 there is misleading.

Update documentation.

This patch changes default logging, former filtered Info messages
are displayed now.

There is no _big_ difference in practice since currently the log is
anyway full of info messages from parts which do not use
reconciler's logger, like:

{"level":"info","ts":"2024-10-09T13:23:11Z","msg":"waiting for 1 deployment to be ready for dashboard"}

Signed-off-by: Yauheni Kaliuta <[email protected]>
  • Loading branch information
ykaliuta authored Oct 17, 2024
1 parent fa862a1 commit de19e1e
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 31 deletions.
15 changes: 5 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,17 +224,12 @@ This will ensure that the doc for the apis are updated accordingly.

#### Controller level

Logger on all controllers can only be changed from CSV with parameters: --log-mode devel
valid value: "" (as default) || prod || production || devel || development
Global logger configuration can be changed with a command line switch `--log-mode <mode>`
for example from CSV. Valid values for `<mode>`: "" (as default) || prod || production || devel || development.

This mainly impacts logging for operator pod startup, generating common resource, monitoring deployment.

| --log-mode value | mapping Log level | Comments |
| ---------------- | ------------------- | -------------- |
| devel | debug / 0 | lowest level |
| "" | info / 1 | default option |
| default | info / 1 | default option |
| prod | error / 2 | highest level |
Verbosity level is INFO.
To fine tune zap backend [standard operator sdk zap switches](https://sdk.operatorframework.io/docs/building-operators/golang/references/logging/)
can be used.

#### Component level

Expand Down
8 changes: 4 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ func main() { //nolint:funlen,maintidx
if err = (&dscictrl.DSCInitializationReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Log: logger.LogWithLevel(ctrl.Log.WithName(operatorName).WithName("controllers").WithName("DSCInitialization"), logmode),
Log: ctrl.Log.WithName(operatorName).WithName("controllers").WithName("DSCInitialization"),
Recorder: mgr.GetEventRecorderFor("dscinitialization-controller"),
ApplicationsNamespace: dscApplicationsNamespace,
}).SetupWithManager(ctx, mgr); err != nil {
Expand All @@ -255,7 +255,7 @@ func main() { //nolint:funlen,maintidx
if err = (&dscctrl.DataScienceClusterReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Log: logger.LogWithLevel(ctrl.Log.WithName(operatorName).WithName("controllers").WithName("DataScienceCluster"), logmode),
Log: ctrl.Log.WithName(operatorName).WithName("controllers").WithName("DataScienceCluster"),
DataScienceCluster: &dscctrl.DataScienceClusterConfig{
DSCISpec: &dsciv1.DSCInitializationSpec{
ApplicationsNamespace: dscApplicationsNamespace,
Expand All @@ -270,7 +270,7 @@ func main() { //nolint:funlen,maintidx
if err = (&secretgenerator.SecretGeneratorReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Log: logger.LogWithLevel(ctrl.Log.WithName(operatorName).WithName("controllers").WithName("SecretGenerator"), logmode),
Log: ctrl.Log.WithName(operatorName).WithName("controllers").WithName("SecretGenerator"),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "SecretGenerator")
os.Exit(1)
Expand All @@ -279,7 +279,7 @@ func main() { //nolint:funlen,maintidx
if err = (&certconfigmapgenerator.CertConfigmapGeneratorReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Log: logger.LogWithLevel(ctrl.Log.WithName(operatorName).WithName("controllers").WithName("CertConfigmapGenerator"), logmode),
Log: ctrl.Log.WithName(operatorName).WithName("controllers").WithName("CertConfigmapGenerator"),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "CertConfigmapGenerator")
os.Exit(1)
Expand Down
17 changes: 0 additions & 17 deletions pkg/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,12 @@ package logger
import (
"flag"
"os"
"strings"

"github.com/go-logr/logr"
"go.uber.org/zap/zapcore"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
)

var logLevelMapping = map[string]int{
"devel": 0,
"default": 1, // default one when not set log-mode
"prod": 2,
}

// NewNamedLogger creates a new logger for a component.
// If the mode is set (so can be different from the default one),
// it will create a new logger with the specified mode's options.
Expand All @@ -26,16 +19,6 @@ func NewNamedLogger(log logr.Logger, name string, mode string) logr.Logger {
return log.WithName(name)
}

// in each controller, to use different log level.
func LogWithLevel(logger logr.Logger, level string) logr.Logger {
level = strings.TrimSpace(level)
verbosityLevel, ok := logLevelMapping[level]
if !ok {
verbosityLevel = 1 // fallback to info level
}
return logger.V(verbosityLevel)
}

func NewLoggerWithOptions(mode string, override *zap.Options) logr.Logger {
opts := newOptions(mode)
overrideOptions(opts, override)
Expand Down

0 comments on commit de19e1e

Please sign in to comment.