update logger support

This commit is contained in:
dwertent
2022-03-10 11:19:05 +02:00
parent 4bd468f03e
commit 33f92d1a5f
7 changed files with 86 additions and 63 deletions
+29 -25
View File
@@ -5,10 +5,9 @@ import (
"strings"
"github.com/armosec/kubescape/cautils/logger/helpers"
"github.com/armosec/kubescape/cautils/logger/mocklogger"
"github.com/armosec/kubescape/cautils/logger/nonelogger"
"github.com/armosec/kubescape/cautils/logger/prettylogger"
"github.com/armosec/kubescape/cautils/logger/zaplogger"
"github.com/mattn/go-isatty"
)
type ILogger interface {
@@ -25,7 +24,7 @@ type ILogger interface {
SetWriter(w *os.File)
GetWriter() *os.File
DisableColor(flag bool)
LoggerName() string
}
var l ILogger
@@ -33,45 +32,50 @@ var l ILogger
// Return initialized logger. If logger not initialized, will call InitializeLogger() with the default value
func L() ILogger {
if l == nil {
InitializeLogger("")
InitDefaultLogger()
}
return l
}
/* InitializeLogger initialize desired logger
/* InitLogger initialize desired logger
Use:
InitializeLogger("<logger name>")
InitLogger("<logger name>")
Supported logger names
Supported logger names (call ListLoggersNames() for listing supported loggers)
- "zap": Logger from package "go.uber.org/zap"
- "pretty", "colorful": Human friendly colorful logger
- "mock", "empty", "ignore": Logger will be totally ignored
e.g.
InitializeLogger("mock") -> will initialize the mock logger
- "none", "mock", "empty", "ignore": Logger will not print anything
Default:
If isatty.IsTerminal(os.Stdout.Fd()):
"pretty"
else
"zap"
- "pretty"
e.g.
InitLogger("none") -> will initialize the mock logger
*/
func InitializeLogger(loggerName string) {
func InitLogger(loggerName string) {
switch strings.ToLower(loggerName) {
case "zap":
case zaplogger.LoggerName:
l = zaplogger.NewZapLogger()
case "pretty", "colorful":
case prettylogger.LoggerName, "colorful":
l = prettylogger.NewPrettyLogger()
case "mock", "empty", "ignore":
l = mocklogger.NewMockLogger()
case nonelogger.LoggerName, "mock", "empty", "ignore":
l = nonelogger.NewNoneLogger()
default:
if isatty.IsTerminal(os.Stdout.Fd()) {
l = prettylogger.NewPrettyLogger()
} else {
l = zaplogger.NewZapLogger()
}
InitDefaultLogger()
}
}
func InitDefaultLogger() {
l = prettylogger.NewPrettyLogger()
}
func DisableColor(flag bool) {
prettylogger.DisableColor(flag)
}
func ListLoggersNames() []string {
return []string{prettylogger.LoggerName, zaplogger.LoggerName, nonelogger.LoggerName}
}
-25
View File
@@ -1,25 +0,0 @@
package mocklogger
import (
"os"
"github.com/armosec/kubescape/cautils/logger/helpers"
)
type MockLogger struct {
}
func NewMockLogger() *MockLogger {
return &MockLogger{}
}
func (zl *MockLogger) GetLevel() string { return "" }
func (zl *MockLogger) SetWriter(w *os.File) {}
func (zl *MockLogger) GetWriter() *os.File { return nil }
func (zl *MockLogger) SetLevel(level string) error { return nil }
func (zl *MockLogger) Fatal(msg string, details ...helpers.IDetails) {}
func (zl *MockLogger) Error(msg string, details ...helpers.IDetails) {}
func (zl *MockLogger) Warning(msg string, details ...helpers.IDetails) {}
func (zl *MockLogger) Success(msg string, details ...helpers.IDetails) {}
func (zl *MockLogger) Info(msg string, details ...helpers.IDetails) {}
func (zl *MockLogger) Debug(msg string, details ...helpers.IDetails) {}
+28
View File
@@ -0,0 +1,28 @@
package nonelogger
import (
"os"
"github.com/armosec/kubescape/cautils/logger/helpers"
)
const LoggerName string = "none"
type NoneLogger struct {
}
func NewNoneLogger() *NoneLogger {
return &NoneLogger{}
}
func (nl *NoneLogger) GetLevel() string { return "" }
func (nl *NoneLogger) LoggerName() string { return LoggerName }
func (nl *NoneLogger) SetWriter(w *os.File) {}
func (nl *NoneLogger) GetWriter() *os.File { return nil }
func (nl *NoneLogger) SetLevel(level string) error { return nil }
func (nl *NoneLogger) Fatal(msg string, details ...helpers.IDetails) {}
func (nl *NoneLogger) Error(msg string, details ...helpers.IDetails) {}
func (nl *NoneLogger) Warning(msg string, details ...helpers.IDetails) {}
func (nl *NoneLogger) Success(msg string, details ...helpers.IDetails) {}
func (nl *NoneLogger) Info(msg string, details ...helpers.IDetails) {}
func (nl *NoneLogger) Debug(msg string, details ...helpers.IDetails) {}
+4 -4
View File
@@ -8,6 +8,8 @@ import (
"github.com/armosec/kubescape/cautils/logger/helpers"
)
const LoggerName string = "pretty"
type PrettyLogger struct {
writer *os.File
level helpers.Level
@@ -15,6 +17,7 @@ type PrettyLogger struct {
}
func NewPrettyLogger() *PrettyLogger {
return &PrettyLogger{
writer: os.Stderr, // default to stderr
level: helpers.InfoLevel,
@@ -25,10 +28,7 @@ func NewPrettyLogger() *PrettyLogger {
func (pl *PrettyLogger) GetLevel() string { return pl.level.String() }
func (pl *PrettyLogger) SetWriter(w *os.File) { pl.writer = w }
func (pl *PrettyLogger) GetWriter() *os.File { return pl.writer }
func (pl *PrettyLogger) DisableColor(flag bool) {
DisableColor(flag)
}
func (pl *PrettyLogger) LoggerName() string { return LoggerName }
func (pl *PrettyLogger) SetLevel(level string) error {
pl.level = helpers.ToLevel(level)
+3 -3
View File
@@ -8,6 +8,8 @@ import (
"go.uber.org/zap/zapcore"
)
const LoggerName string = "zap"
type ZapLogger struct {
zapL *zap.Logger
cfg zap.Config
@@ -35,9 +37,7 @@ func NewZapLogger() *ZapLogger {
func (zl *ZapLogger) GetLevel() string { return zl.cfg.Level.Level().String() }
func (zl *ZapLogger) SetWriter(w *os.File) {}
func (zl *ZapLogger) GetWriter() *os.File { return nil }
func (zl *ZapLogger) DisableColor(flag bool) {}
func (zl *ZapLogger) LoggerName() string { return LoggerName }
func (zl *ZapLogger) SetLevel(level string) error {
l := zapcore.Level(1)
err := l.Set(level)
+1
View File
@@ -55,6 +55,7 @@ func (bpf *BoolPtrFlag) Set(val string) error {
type RootInfo struct {
Logger string // logger level
LoggerName string // logger name ("pretty"/"zap"/"none")
CacheDir string // cached dir
DisableColor bool // Disable Color
}
+21 -6
View File
@@ -9,6 +9,7 @@ import (
"github.com/armosec/kubescape/cautils/getter"
"github.com/armosec/kubescape/cautils/logger"
"github.com/armosec/kubescape/cautils/logger/helpers"
"github.com/mattn/go-isatty"
"github.com/spf13/cobra"
)
@@ -54,6 +55,9 @@ func init() {
rootCmd.PersistentFlags().MarkHidden("environment")
rootCmd.PersistentFlags().MarkHidden("env")
rootCmd.PersistentFlags().StringVarP(&rootInfo.LoggerName, "logger-name", "l", "", fmt.Sprintf("Logger name. Supported: %s [$KS_LOGGER_NAME]", strings.Join(logger.ListLoggersNames(), "/")))
rootCmd.PersistentFlags().MarkHidden("logger-name")
rootCmd.PersistentFlags().StringVarP(&rootInfo.Logger, "logger", "l", helpers.InfoLevel.String(), fmt.Sprintf("Logger level. Supported: %s [$KS_LOGGER]", strings.Join(helpers.SupportedLevels(), "/")))
rootCmd.PersistentFlags().StringVar(&rootInfo.CacheDir, "cache-dir", getter.DefaultLocalStore, "Cache directory [$KS_CACHE_DIR]")
rootCmd.PersistentFlags().BoolVarP(&rootInfo.DisableColor, "disable-color", "", false, "Disable Color output for logging")
@@ -61,9 +65,22 @@ func init() {
}
func initLogger() {
if l := os.Getenv("KS_LOGGER_NAME"); l != "" {
logger.InitializeLogger(l)
logger.DisableColor(rootInfo.DisableColor)
if rootInfo.LoggerName == "" {
if l := os.Getenv("KS_LOGGER_NAME"); l != "" {
rootInfo.LoggerName = l
} else {
if isatty.IsTerminal(os.Stdout.Fd()) {
rootInfo.LoggerName = "pretty"
} else {
rootInfo.LoggerName = "zap"
}
}
}
logger.InitLogger(rootInfo.LoggerName)
}
func initLoggerLevel() {
if rootInfo.Logger != helpers.InfoLevel.String() {
@@ -71,20 +88,18 @@ func initLoggerLevel() {
rootInfo.Logger = l
}
logger.L().DisableColor(rootInfo.DisableColor)
if err := logger.L().SetLevel(rootInfo.Logger); err != nil {
logger.L().Fatal(fmt.Sprintf("supported levels: %s", strings.Join(helpers.SupportedLevels(), "/")), helpers.Error(err))
}
}
func initCacheDir() {
if rootInfo.CacheDir != getter.DefaultLocalStore {
if rootInfo.CacheDir == getter.DefaultLocalStore {
getter.DefaultLocalStore = rootInfo.CacheDir
} else if cacheDir := os.Getenv("KS_CACHE_DIR"); cacheDir != "" {
getter.DefaultLocalStore = cacheDir
} else {
return // using default cache di location
return // using default cache dir location
}
logger.L().Debug("cache dir updated", helpers.String("path", getter.DefaultLocalStore))