答案:通过 iota 定义 DEBUG、INFO、WARN、ERROR 级别,使用 Logger 结构体封装 level 控制输出,各日志方法判断级别是否达标再打印。

在Go项目中实现日志级别控制并不复杂,关键在于设计清晰的级别分类和灵活的输出控制。下面是一个实用的日志级别控制实现方案,适合中小型项目快速集成。
使用 iota 枚举常见的日志级别,便于比较和判断:
const (
DEBUG = iota
INFO
WARN
ERROR
)
通过常量定义,可以方便地控制哪些级别的日志应该被输出。
封装一个简单的 Logger 结构,包含当前级别和输出目标:
立即学习“go语言免费学习笔记(深入)”;
type Logger struct {
level int
}
初始化时传入期望的日志级别,低于该级别的日志将被忽略。
为每个级别提供对应的打印函数,并判断是否达到输出条件:
func (l *Logger) Debug(msg string, args ...interface{}) {
if DEBUG >= l.level {
log.Printf("[DEBUG] "+msg, args...)
}
}
func (l *Logger) Info(msg string, args ...interface{}) {
if INFO >= l.level {
log.Printf("[INFO] "+msg, args...)
}
}
func (l *Logger) Warn(msg string, args ...interface{}) {
if WARN >= l.level {
log.Printf("[WARN] "+msg, args...)
}
}
func (l *Logger) Error(msg string, args ...interface{}) {
if ERROR >= l.level {
log.Printf("[ERROR] "+msg, args...)
}
}
这样调用 logger.Debug("user login", "id", 123) 时,只有设置 level
可以在程序启动时通过命令行参数或环境变量控制日志级别:
flag.IntVar(&logLevel, "log-level", INFO, "set log level: 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR")
或者读取环境变量:
levelStr := os.Getenv("LOG_LEVEL")
switch levelStr {
case "DEBUG":
logger.level = DEBUG
case "INFO":
logger.level = INFO
default:
logger.level = INFO
}
以上就是如何在Golang中实现简单的日志级别控制_Golang日志级别控制项目实战汇总的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号