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 }