go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/logger/log.go (about) 1 // copyright: 2019, Dominik Richter and Christoph Hartmann 2 // author: Dominik Richter 3 // author: Christoph Hartmann 4 5 package logger 6 7 import ( 8 "io" 9 "os" 10 "time" 11 12 "github.com/rs/zerolog" 13 "github.com/rs/zerolog/log" 14 ) 15 16 // we use colorable to support color output on windows 17 // we buffer it by default, so that tui components can interrupt cli logger 18 var LogOutputWriter = NewBufferedWriter(os.Stderr) 19 20 // Debug is set to true if the application is running in a debug mode 21 var Debug bool 22 23 // SetWriter configures a log writer for the global logger 24 func SetWriter(w io.Writer) { 25 log.Logger = log.Output(w) 26 } 27 28 // UseJSONLogging for global logger 29 func UseJSONLogging(out io.Writer) { 30 log.Logger = zerolog.New(out).With().Timestamp().Logger() 31 } 32 33 // UseGCPJSONLogging for global logger. This is a JSON logger 34 // with field names GCP will recognize 35 func UseGCPJSONLogging(out io.Writer) { 36 zerolog.LevelFieldName = "severity" 37 zerolog.TimestampFieldName = "timestamp" 38 zerolog.TimeFieldFormat = time.RFC3339Nano 39 40 log.Logger = zerolog.New(out).With().Timestamp().Logger() 41 } 42 43 // CliLogger sets the global logger to the console logger with color 44 func CliLogger() { 45 log.Logger = NewConsoleWriter(LogOutputWriter, false) 46 } 47 48 func CliCompactLogger(out io.Writer) { 49 log.Logger = NewConsoleWriter(out, true) 50 } 51 52 func StandardZerologLogger() { 53 log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}) 54 } 55 56 // Set will set up the logger 57 func Set(level string) { 58 switch level { 59 case "error": 60 zerolog.SetGlobalLevel(zerolog.ErrorLevel) 61 case "warn": 62 zerolog.SetGlobalLevel(zerolog.WarnLevel) 63 case "info": 64 zerolog.SetGlobalLevel(zerolog.InfoLevel) 65 case "debug": 66 zerolog.SetGlobalLevel(zerolog.DebugLevel) 67 case "trace": 68 zerolog.SetGlobalLevel(zerolog.TraceLevel) 69 case "": 70 zerolog.SetGlobalLevel(zerolog.InfoLevel) 71 default: 72 log.Error().Msg("unknown log level: " + level) 73 } 74 } 75 76 func GetLevel() string { 77 return zerolog.GlobalLevel().String() 78 } 79 80 // InitTestEnv will set all log configurations for a test environment 81 // verbose and colorful 82 func InitTestEnv() { 83 Set("debug") 84 log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, NoColor: true}) 85 } 86 87 // GetEnvLogLevel determines the loglevel from env vars DEBUG or TRACE are set 88 func GetEnvLogLevel() (string, bool) { 89 level := "" 90 ok := false 91 92 if os.Getenv("DEBUG") == "true" || os.Getenv("DEBUG") == "1" { 93 level = "debug" 94 ok = true 95 } 96 97 if os.Getenv("TRACE") == "true" || os.Getenv("TRACE") == "1" { 98 level = "trace" 99 ok = true 100 } 101 102 return level, ok 103 }