Go语言实战案例-简易日志记录器
🎯 案例目标
实现一个能够向本地文件写入日志的简易记录器,掌握 Go 中如何打开/创建文件、以追加方式写入文本,并附加时间戳。
🧩 应用场景
- • 日志记录系统运行状态或用户行为
- • 错误日志追踪
- • 服务器输出日志写入本地文件
🧠 涉及知识点
- • 使用
os.OpenFile()
打开或创建文件 - • 使用
time.Now()
获取当前时间 - • 使用
fmt.Fprintf()
向文件写入格式化内容 - • 使用
defer
关闭文件资源
💻 示例代码
package mainimport ("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)
[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 | 构造带时间戳的字符串 |
🧪 进阶用法
你可以将该程序封装为函数或模块,在多个地方复用:
func WriteLog(message string) {...
}
也可以将日志级别(INFO、ERROR)加入输出内容:
logEntry := fmt.Sprintf("[%s] [INFO] %s\n", currentTime, logMessage)
📌 拓展练习
- • 将日志写入不同文件夹,根据日期切分日志
- • 设置最大文件大小,自动切割日志
- • 支持按日志等级过滤输出
- • 使用
bufio.NewWriter()
提高写入效率
✅ 小结
通过本案例,你学会了如何在 Go 中记录日志到本地文件,掌握了基本的文件操作和时间戳格式化,为构建更完善的日志系统打下基础。