github.com/rolandhe/saber@v0.0.4/logger/logger.go (about)

     1  // Package logger
     2  //
     3  // Copyright 2023 The saber Authors. All rights reserved.
     4  //
     5  
     6  package logger
     7  
     8  import (
     9  	"github.com/rolandhe/saber/utils"
    10  	"log"
    11  	"strconv"
    12  )
    13  
    14  const (
    15  	DebugLevel = iota
    16  	InfoLevel
    17  	ErrorLevel
    18  )
    19  
    20  // Logger 封装log类似与java slf4j的功能
    21  type Logger interface {
    22  	// Debug debug级别的日志输出,fmt.Printf 格式输出
    23  	// 日志级别必须是 DebugLevel
    24  	Debug(format string, v ...any)
    25  
    26  	// DebugLn debug级别的日志输出,fmt.Println 格式输出
    27  	// 日志级别必须是 DebugLevel
    28  	DebugLn(v ...any)
    29  
    30  	// Info Info 级别的日志输出,fmt.Printf 格式输出
    31  	// 日志级别必须是 DebugLevel 或者 InfoLevel
    32  	Info(format string, v ...any)
    33  
    34  	// InfoLn Info 级别的日志输出,fmt.Println 格式输出
    35  	// 日志级别必须是 DebugLevel 或者 InfoLevel
    36  	InfoLn(v ...any)
    37  
    38  	// Error Error 级别的日志输出,fmt.Printf 格式输出
    39  	Error(format string, v ...any)
    40  	// ErrorLn Error 级别的日志输出,fmt.Println 格式输出
    41  	ErrorLn(v ...any)
    42  }
    43  
    44  // NewDefaultLogger 构建Info级别的缺省日志输出实例
    45  func NewDefaultLogger() Logger {
    46  	return NewLoggerWithLevel(InfoLevel)
    47  }
    48  
    49  // NewLoggerWithLevel  指定日志级别并生成对应的缺省日志输出实例
    50  // logLevel 日志级别, 必须是以下枚举之一
    51  //
    52  //	DebugLevel
    53  //
    54  //	InfoLevel
    55  //
    56  //	ErrorLevel
    57  func NewLoggerWithLevel(logLevel int) Logger {
    58  	return &defaultLogger{
    59  		logLevel,
    60  	}
    61  }
    62  
    63  type defaultLogger struct {
    64  	logLevel int
    65  }
    66  
    67  func (logger *defaultLogger) Debug(format string, v ...any) {
    68  	if logger.IsEnableDebug() {
    69  		logOutput("[Debug]", format, v...)
    70  	}
    71  }
    72  
    73  func (logger *defaultLogger) DebugLn(v ...any) {
    74  	if logger.IsEnableDebug() {
    75  		logOutputLn("[Debug]", v...)
    76  	}
    77  }
    78  
    79  func (logger *defaultLogger) Info(format string, v ...any) {
    80  	if logger.IsEnableInfo() {
    81  		logOutput("[Info]", format, v...)
    82  	}
    83  }
    84  
    85  func (logger *defaultLogger) InfoLn(v ...any) {
    86  	if logger.IsEnableInfo() {
    87  		logOutputLn("[Info]", v...)
    88  	}
    89  }
    90  
    91  func (logger *defaultLogger) Error(format string, v ...any) {
    92  	if logger.IsEnableError() {
    93  		logOutput("[Error]", format, v...)
    94  	}
    95  }
    96  
    97  func (logger *defaultLogger) ErrorLn(v ...any) {
    98  	if logger.IsEnableError() {
    99  		logOutputLn("[Error]", v...)
   100  	}
   101  }
   102  
   103  func (logger *defaultLogger) IsEnableDebug() bool {
   104  	return logger.logLevel <= DebugLevel
   105  }
   106  
   107  func (logger *defaultLogger) IsEnableInfo() bool {
   108  	return logger.logLevel <= InfoLevel
   109  }
   110  
   111  func (logger *defaultLogger) IsEnableError() bool {
   112  	return logger.logLevel <= ErrorLevel
   113  }
   114  
   115  func logOutput(prefix string, format string, v ...any) {
   116  	gid, _ := utils.GetGoRoutineId()
   117  	gidSec := " gid=" + strconv.FormatUint(gid, 10)
   118  	log.Printf(prefix+gidSec+" "+format, v...)
   119  }
   120  
   121  func logOutputLn(prefix string, v ...any) {
   122  	merge := make([]any, 0, len(v)+1)
   123  	gid, _ := utils.GetGoRoutineId()
   124  	gidSec := " gid=" + strconv.FormatUint(gid, 10)
   125  	merge = append(merge, prefix+gidSec+" ")
   126  	merge = append(merge, v...)
   127  	log.Println(merge...)
   128  }