add logging to the operator
Some checks failed
Build images / Run e2e tests (push) Failing after 1m57s
Build images / Run lint test (push) Failing after 7m27s
Lint / Run on Ubuntu (push) Failing after 6m47s
Build images / Run unit test (push) Failing after 8m53s
Build images / Build docker image (push) Has been skipped
E2E Tests / Run on Ubuntu (push) Failing after 1m50s
Tests / Run on Ubuntu (push) Failing after 3m1s

add logging
This commit is contained in:
Chris Richardson
2025-07-02 12:48:45 -04:00
parent d9a945efd4
commit 4d9663fe60
7 changed files with 719 additions and 31 deletions

43
cmd/logging.go Normal file
View File

@@ -0,0 +1,43 @@
package main
import (
"log"
"os"
"github.com/go-logr/logr"
"github.com/go-logr/zapr"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
// CreateFileLogger Create a logger that will write to console, and file along with log rotation
func CreateFileLogger(fileName string, logLevel zapcore.LevelEnabler) logr.Logger {
// Create file with desired permissions
file, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
config := zap.NewProductionEncoderConfig()
config.EncodeTime = zapcore.ISO8601TimeEncoder
fileEncoder := zapcore.NewJSONEncoder(config)
consoleEncoder := zapcore.NewConsoleEncoder(config)
writer := zapcore.AddSync(&lumberjack.Logger{
Filename: fileName,
MaxSize: 1000, //MB
MaxBackups: 3,
MaxAge: 90, //days
Compress: false,
})
core := zapcore.NewTee(
zapcore.NewCore(fileEncoder, writer, logLevel),
zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), logLevel),
)
logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
return zapr.NewLogger(logger)
}

View File

@@ -24,15 +24,15 @@ import (
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
// to ensure that exec-entrypoint and run can make use of them.
_ "k8s.io/client-go/plugin/pkg/client/auth"
"go.uber.org/zap"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/certwatcher"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
//"sigs.k8s.io/controller-runtime/pkg/log/zap"
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
"sigs.k8s.io/controller-runtime/pkg/webhook"
@@ -56,6 +56,7 @@ func init() {
// nolint:gocyclo
func main() {
var logFilePath string
var metricsAddr string
var metricsCertPath, metricsCertName, metricsCertKey string
var webhookCertPath, webhookCertName, webhookCertKey string
@@ -81,13 +82,19 @@ func main() {
flag.StringVar(&metricsCertKey, "metrics-cert-key", "tls.key", "The name of the metrics server key file.")
flag.BoolVar(&enableHTTP2, "enable-http2", false,
"If set, HTTP/2 will be enabled for the metrics and webhook servers")
opts := zap.Options{
Development: true,
}
opts.BindFlags(flag.CommandLine)
flag.StringVar(&logFilePath, "log-file", "/var/log/etcd-operator", "The log file to write logs to.")
/*
opts := zap.Options{
Development: true,
}
opts.BindFlags(flag.CommandLine)
*/
flag.Parse()
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
logger := CreateFileLogger(logFilePath, zap.DebugLevel)
//ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
ctrl.SetLogger(logger)
// if the enable-http2 flag is false (the default), http/2 should be disabled
// due to its vulnerabilities. More specifically, disabling http/2 will