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  }