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  }