Add debug package for logging with adjustable levels
- Introduced a new debug package that allows for logging at various levels (1-7). - Implemented initialization, logger retrieval, and logging functions. - Added functionality to set and get the current debug level.
This commit is contained in:
112
pkg/debug/debug.go
Normal file
112
pkg/debug/debug.go
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
package debug
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DEBUG_CRITICAL = 1
|
||||||
|
DEBUG_ERROR = 2
|
||||||
|
DEBUG_INFO = 3
|
||||||
|
DEBUG_VERBOSE = 4
|
||||||
|
DEBUG_TRACE = 5
|
||||||
|
DEBUG_PACKETS = 6
|
||||||
|
DEBUG_ALL = 7
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
debugLevel = flag.Int("debug", 3, "debug level (1-7)")
|
||||||
|
logger *slog.Logger
|
||||||
|
initialized bool
|
||||||
|
)
|
||||||
|
|
||||||
|
func Init() {
|
||||||
|
if initialized {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
initialized = true
|
||||||
|
|
||||||
|
var level slog.Level
|
||||||
|
switch {
|
||||||
|
case *debugLevel >= DEBUG_ALL:
|
||||||
|
level = slog.LevelDebug
|
||||||
|
case *debugLevel >= DEBUG_PACKETS:
|
||||||
|
level = slog.LevelDebug
|
||||||
|
case *debugLevel >= DEBUG_TRACE:
|
||||||
|
level = slog.LevelDebug
|
||||||
|
case *debugLevel >= DEBUG_VERBOSE:
|
||||||
|
level = slog.LevelDebug
|
||||||
|
case *debugLevel >= DEBUG_INFO:
|
||||||
|
level = slog.LevelInfo
|
||||||
|
case *debugLevel >= DEBUG_ERROR:
|
||||||
|
level = slog.LevelWarn
|
||||||
|
case *debugLevel >= DEBUG_CRITICAL:
|
||||||
|
level = slog.LevelError
|
||||||
|
default:
|
||||||
|
level = slog.LevelError
|
||||||
|
}
|
||||||
|
|
||||||
|
opts := &slog.HandlerOptions{
|
||||||
|
Level: level,
|
||||||
|
}
|
||||||
|
logger = slog.New(slog.NewTextHandler(os.Stderr, opts))
|
||||||
|
slog.SetDefault(logger)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetLogger() *slog.Logger {
|
||||||
|
if !initialized {
|
||||||
|
Init()
|
||||||
|
}
|
||||||
|
return logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func Log(level int, msg string, args ...interface{}) {
|
||||||
|
if !initialized {
|
||||||
|
Init()
|
||||||
|
}
|
||||||
|
|
||||||
|
if *debugLevel < level {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var slogLevel slog.Level
|
||||||
|
switch {
|
||||||
|
case level >= DEBUG_ALL:
|
||||||
|
slogLevel = slog.LevelDebug
|
||||||
|
case level >= DEBUG_PACKETS:
|
||||||
|
slogLevel = slog.LevelDebug
|
||||||
|
case level >= DEBUG_TRACE:
|
||||||
|
slogLevel = slog.LevelDebug
|
||||||
|
case level >= DEBUG_VERBOSE:
|
||||||
|
slogLevel = slog.LevelDebug
|
||||||
|
case level >= DEBUG_INFO:
|
||||||
|
slogLevel = slog.LevelInfo
|
||||||
|
case level >= DEBUG_ERROR:
|
||||||
|
slogLevel = slog.LevelWarn
|
||||||
|
case level >= DEBUG_CRITICAL:
|
||||||
|
slogLevel = slog.LevelError
|
||||||
|
default:
|
||||||
|
slogLevel = slog.LevelError
|
||||||
|
}
|
||||||
|
|
||||||
|
if !logger.Enabled(nil, slogLevel) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.Log(nil, slogLevel, fmt.Sprintf(msg, args...), "debug_level", level)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetDebugLevel(level int) {
|
||||||
|
*debugLevel = level
|
||||||
|
if initialized {
|
||||||
|
Init()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDebugLevel() int {
|
||||||
|
return *debugLevel
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user