Go标准库log包通过环境变量控制级别、SetFlags添加时间戳与文件信息、SetOutput切换输出目标,配合封装可满足多环境日志需求。
Go 标准库的 log 包足够轻量且灵活,配合环境变量或配置文件即可实现开发、测试、生产环境的日志分级输出和格式定制,无需引入重型日志框架也能满足大多数场景。
通过读取环境变量(如 LOG_LEVEL=debug)控制是否输出调试信息。标准 log 本身不内置级别,但可用封装实现:
const ( Debug = iota; Info; Warn; Error )
os.Getenv("LOG_LEVEL") 解析后,只在当前级别 ≥ 配置级别时调用 log.Print/Printf
Debug 级别输出,生产环境设为 Error,避免敏感信息泄露默认 log 输出不含时间或文件信息,可通过 log.SetFlags() 启用:
log.SetFlags(log.LstdFlags | log.Lshortfile) —— 添加日期、时间、文件名与行号Logger 类型,用 log.New() 创建实例,并在每次写入前拼接前缀fmt.Sprintf 或预分配缓冲区log.SetOutput() 可切换输出目标:
os.Stdout(默认),便于实时查看os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
syslog(需第三方包如 github.com/hashicorp/go-syslog),方便统一收集lumberjack 库自动切分不要靠注释/反注释日志语句管理调试开关:
if logge
r.level >= Debug { logger.Debug("...") } 形式包裹调试日志main() 开头初始化日志器,根据环境变量或命令行参数(如 -debug)设置初始级别标准库日志够用,关键在结构化控制和习惯性封装。不复杂但容易忽略细节。