🎯 案例目标
实现一个能够向本地文件写入日志的简易记录器,掌握 Go 中如何打开/创建文件、以追加方式写入文本,并附加时间戳。
🧩 应用场景
- • 日志记录系统运行状态或用户行为
- • 错误日志追踪
- • 服务器输出日志写入本地文件
🧠 涉及知识点
- • 使用
os.OpenFile()
打开或创建文件 - • 使用
time.Now()
获取当前时间 - • 使用
fmt.Fprintf()
向文件写入格式化内容 - • 使用
defer
关闭文件资源
💻 示例代码
go
package main
import (
"fmt"
"os"
"time"
)
func main() {
// 定义日志内容
logMessage := "用户登录成功"
// 获取当前时间
currentTime := time.Now().Format("2006-01-02 15:04:05")
// 打开或创建文件,追加写入权限
file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("无法打开日志文件:", err)
return
}
defer file.Close()
// 写入日志内容,带时间戳
logEntry := fmt.Sprintf("[%s] %s\n", currentTime, logMessage)
if _, err := file.WriteString(logEntry); err != nil {
fmt.Println("写入日志失败:", err)
return
}
fmt.Println("日志写入成功!")
}
📂 写入结果示例(app.log)
csharp
[2025-07-18 10:21:33] 用户登录成功
[2025-07-18 10:25:12] 用户点击按钮
🛠 技术说明
函数/库 | 作用 |
---|---|
os.OpenFile |
打开或创建文件 |
os.O_APPEND |
追加写入 |
os.O_CREATE |
文件不存在时创建 |
time.Now().Format(...) |
获取并格式化当前时间 |
fmt.Sprintf |
构造带时间戳的字符串 |
🧪 进阶用法
你可以将该程序封装为函数或模块,在多个地方复用:
go
func WriteLog(message string) {
...
}
也可以将日志级别(INFO、ERROR)加入输出内容:
perl
logEntry := fmt.Sprintf("[%s] [INFO] %s\n", currentTime, logMessage)
📌 拓展练习
- • 将日志写入不同文件夹,根据日期切分日志
- • 设置最大文件大小,自动切割日志
- • 支持按日志等级过滤输出
- • 使用
bufio.NewWriter()
提高写入效率
✅ 小结
通过本案例,你学会了如何在 Go 中记录日志到本地文件,掌握了基本的文件操作和时间戳格式化,为构建更完善的日志系统打下基础。