核心功能与接口
- 
基础日志输出
- 
Print 系列 :支持
Print()、Println()、Printf(),输出日志不中断程序。clog.Print("常规日志") // 输出: 2025/03/18 14:47:13 常规日志 log.Printf("格式化: %s", "数据") - 
Fatal 系列 :调用后触发
os.Exit(1)终止程序,不会执行 defer 函数。clog.Fatal("严重错误") // 输出日志并退出 - 
Panic 系列 :输出日志后触发
panic(),可通过recover()捕获。godefer func() { if err := recover(); err != nil {} }() log.Panic("触发崩溃") 
 - 
 - 
预定义 Logger
- 默认使用 
log.Stdout输出到控制台,可通过log.SetOutput()重定向到文件或网络。 
 - 默认使用 
 
配置与定制
- 
设置日志前缀
log.SetPrefix("APP: ")添加固定前缀,如APP: 2025/03/18 14:47:13 日志内容。
 - 
调整日志格式
- 
通过
log.SetFlags()组合标志位控制输出内容:clog.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 输出示例: 2025/03/18 14:47:13 main.go:10: 日志内容- 常用标志:
Ldate(日期)、Ltime(时间)、Lmicroseconds(微秒)、Llongfile(完整文件路径)、LUTC(UTC 时间)。 
 - 常用标志:
 
 - 
 - 
自定义 Logger 对象
- 
使用
log.New()创建独立 Logger,支持多目标输出:luavar ( DebugLog = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile) InfoLog = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime) ErrorLog = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Llongfile) ) func main() { DebugLog.Println("调试信息") // DEBUG: 2023/10/01 12:00:00 /path/main.go:15 InfoLog.Printf("用户登录: %s", "user123") // INFO: 2023/10/01 12:00:00 用户登录: user123 ErrorLog.Fatal("数据库连接失败") // ERROR: 2023/10/01 12:00:00 /path/main.go:18 } 
lua// 输出到文件 file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { log.Fatal("打开文件失败:", err) } defer file.Close() // 设置全局日志输出 log.SetOutput(file) // 同时输出到文件和标准错误 multiWriter := io.MultiWriter(file, os.Stderr) log.SetOutput(multiWriter)log.SetOutput(io.Discard)关闭日志
 - 
 
与 fmt 包的差异
| 特性 | log 包 | 
fmt 包 | 
|---|---|---|
| 输出目标 | 默认 stderr,可自定义(文件/网络) | 默认 stdout | 
| 时间戳 | 支持自动添加 | 无 | 
| 并发安全 | 是(内置互斥锁) | 否 | 
| 程序中断 | 支持 Fatal/Panic 中断 | 仅输出内容 | 
| 适用场景 | 正式日志记录 | 临时调试输出 |