Go标准库log包轻量易用,适合快速记录日志。默认通过log.Print、log.Printf、log.Println输出到stderr,带时间戳;可自定义logger控制输出目标、前缀和标志位,如log.New(os.Stdout, "[DEBUG] ", log.LstdFlags|log.Lshortfile);可通过log.SetOutput、SetPrefix、SetFlags修改全局logger,但需谨慎;不支持日志级别、轮转等高级功能,生产环境建议用zap等第三方库。

Go 标准库的 log 包轻量、易用,适合快速记录调试信息或简单服务日志,无需引入第三方依赖。
基础用法:默认 logger 输出到 stderr
直接调用 log.Print、log.Printf 或 log.Println 即可输出带时间戳的日志(默认格式:2024/03/15 10:22:33 message)。
-
log.Print("hello")—— 不换行,不加额外空格 -
log.Println("hello")—— 自动换行,参数间加空格 -
log.Printf("user %s logged in at %v", "alice", time.Now())—— 支持格式化,类似 fmt.Printf
自定义 logger:控制输出目标和前缀
用 log.New 创建新 logger,可指定写入位置(如文件)、前缀和标志位:
-
writer := os.Stdout或os.File(如os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)) - 前缀字符串(如
"[INFO]")会在每条日志开头显示 - 标志位常用组合:
log.LstdFlags | log.Lshortfile(含日期时间 + 文件名:行号)
示例:logger := log.New(os.Stdout, "[DEBUG] ", log.LstdFlags|log.Lshortfile)logger.Println("request received")
设置全局 logger(慎用)
可通过 log.SetOutput、log.SetPrefix、log.SetFlags 修改默认 logger 行为,但会影响所有使用 log.Print* 的地方,多用于主函数初始化。
立即学习“go语言免费学习笔记(深入)”;
log.SetOutput(os.Stdout)log.SetPrefix("[APP] ")log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
注意点与局限性
log 包不支持日志级别(info/warn/error)、轮转、异步写入等高级功能。生产环境建议搭配 zap、zerolog 或 logrus;但写小工具、CLI 或原型时,标准 log 完全够用,且零依赖。
基本上就这些 —— 简单、直接、不花哨,正适合 Go 的哲学。










