go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/logger.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package providers 5 6 import ( 7 "io" 8 "log" 9 10 "github.com/hashicorp/go-hclog" 11 "github.com/rs/zerolog" 12 ) 13 14 // wrap zerolog to hclogger 15 type hclogger struct { 16 zerolog.Logger 17 } 18 19 var _ hclog.Logger = (*hclogger)(nil) 20 21 func (l *hclogger) IsTrace() bool { 22 return l.Logger.GetLevel() == zerolog.TraceLevel 23 } 24 25 func (l *hclogger) IsDebug() bool { 26 return l.Logger.GetLevel() == zerolog.DebugLevel 27 } 28 29 func (l *hclogger) IsInfo() bool { 30 return l.Logger.GetLevel() == zerolog.InfoLevel 31 } 32 33 func (l *hclogger) IsWarn() bool { 34 return l.Logger.GetLevel() == zerolog.WarnLevel 35 } 36 37 func (l *hclogger) IsError() bool { 38 return l.Logger.GetLevel() == zerolog.ErrorLevel 39 } 40 41 func (l *hclogger) Trace(format string, args ...interface{}) { 42 l.Logger.Trace().Fields(args).Msg(format) 43 } 44 45 func (l *hclogger) Debug(format string, args ...interface{}) { 46 l.Logger.Debug().Fields(args).Msg(format) 47 } 48 49 func (l *hclogger) Info(format string, args ...interface{}) { 50 l.Logger.Info().Fields(args).Msg(format) 51 } 52 53 func (l *hclogger) Warn(format string, args ...interface{}) { 54 l.Logger.Warn().Fields(args).Msg(format) 55 } 56 57 func (l *hclogger) Error(format string, args ...interface{}) { 58 l.Logger.Error().Fields(args).Msg(format) 59 } 60 61 func (l *hclogger) Log(level hclog.Level, format string, args ...interface{}) { 62 switch level { 63 case hclog.Trace: 64 l.Logger.Trace().Fields(args).Msg(format) 65 case hclog.Debug: 66 l.Logger.Debug().Fields(args).Msg(format) 67 case hclog.Info: 68 l.Logger.Info().Fields(args).Msg(format) 69 case hclog.Warn: 70 l.Logger.Warn().Fields(args).Msg(format) 71 case hclog.Error: 72 l.Logger.Error().Fields(args).Msg(format) 73 default: 74 log.Fatalf("unknown level %d", level) 75 } 76 } 77 78 func (l *hclogger) SetLevel(level hclog.Level) { 79 switch level { 80 case hclog.Trace: 81 l.Logger = l.Logger.Level(zerolog.TraceLevel) 82 case hclog.Debug: 83 l.Logger = l.Logger.Level(zerolog.DebugLevel) 84 case hclog.Info: 85 l.Logger = l.Logger.Level(zerolog.InfoLevel) 86 case hclog.Warn: 87 l.Logger = l.Logger.Level(zerolog.WarnLevel) 88 case hclog.Error: 89 l.Logger = l.Logger.Level(zerolog.ErrorLevel) 90 default: 91 log.Fatalf("unknown level %d", level) 92 } 93 } 94 95 // Returns the current level 96 func (l *hclogger) GetLevel() hclog.Level { 97 switch l.Logger.GetLevel() { 98 case zerolog.TraceLevel: 99 return hclog.Trace 100 case zerolog.DebugLevel: 101 return hclog.Debug 102 case zerolog.InfoLevel: 103 return hclog.Info 104 case zerolog.WarnLevel: 105 return hclog.Warn 106 case zerolog.ErrorLevel: 107 return hclog.Error 108 default: 109 log.Fatalf("unknown level %d", l.Logger.GetLevel()) 110 } 111 return hclog.Trace 112 } 113 114 func (l *hclogger) Name() string { 115 return "" 116 } 117 118 func (l *hclogger) Named(name string) hclog.Logger { 119 return &hclogger{l.Logger.With().Str("name", name).Logger()} 120 } 121 122 func (l *hclogger) ResetNamed(name string) hclog.Logger { 123 return &hclogger{l.Logger.With().Str("name", name).Logger()} 124 } 125 126 func (l *hclogger) With(args ...interface{}) hclog.Logger { 127 return &hclogger{l.Logger.With().Fields(args).Logger()} 128 } 129 130 func (l *hclogger) StandardLogger(opts *hclog.StandardLoggerOptions) *log.Logger { 131 return log.New(l.Logger, "", 0) 132 } 133 134 func (l *hclogger) StandardWriter(opts *hclog.StandardLoggerOptions) io.Writer { 135 return l.Logger 136 } 137 138 func (l *hclogger) ImpliedArgs() []interface{} { 139 return nil 140 }