github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/goutils/logger/logger.go (about) 1 /* 2 * Copyright (c) 2020-present unTill Pro, Ltd. and Contributors 3 * @author Maxim Geraskin 4 * 5 * This source code is licensed under the MIT license found in the 6 * LICENSE file in the root directory of this source tree. 7 */ 8 9 package logger 10 11 import ( 12 "fmt" 13 "io" 14 "os" 15 "sync/atomic" 16 ) 17 18 // TLogLevel s.e. 19 type TLogLevel int32 20 21 // Log Levels enum 22 const ( 23 LogLevelNone = TLogLevel(iota) 24 LogLevelError 25 LogLevelWarning 26 LogLevelInfo 27 LogLevelVerbose // aka Debug 28 LogLevelTrace 29 ) 30 31 func SetLogLevel(logLevel TLogLevel) { 32 atomic.StoreInt32((*int32)(&globalLogPrinter.logLevel), int32(logLevel)) 33 } 34 35 func Error(args ...interface{}) { 36 printIfLevel(0, LogLevelError, args...) 37 } 38 39 func Warning(args ...interface{}) { 40 printIfLevel(0, LogLevelWarning, args...) 41 } 42 43 func Info(args ...interface{}) { 44 printIfLevel(0, LogLevelInfo, args...) 45 } 46 47 func Verbose(args ...interface{}) { 48 printIfLevel(0, LogLevelVerbose, args...) 49 } 50 51 func Trace(args ...interface{}) { 52 printIfLevel(0, LogLevelTrace, args...) 53 } 54 55 func Log(skipStackFrames int, level TLogLevel, args ...interface{}) { 56 printIfLevel(skipStackFrames, level, args...) 57 } 58 59 func IsError() bool { 60 return isEnabled(LogLevelError) 61 } 62 63 func IsInfo() bool { 64 return isEnabled(LogLevelInfo) 65 } 66 67 func IsWarning() bool { 68 return isEnabled(LogLevelWarning) 69 } 70 71 func IsVerbose() bool { 72 return isEnabled(LogLevelVerbose) 73 } 74 75 func IsTrace() bool { 76 return isEnabled(LogLevelTrace) 77 } 78 79 var PrintLine func(level TLogLevel, line string) = DefaultPrintLine 80 81 func DefaultPrintLine(level TLogLevel, line string) { 82 var w io.Writer 83 if level == LogLevelError { 84 w = os.Stderr 85 } else { 86 w = os.Stdout 87 } 88 fmt.Fprintln(w, line) 89 }