Go语言实战案例-简易日志记录器

🎯 案例目标

实现一个能够向本地文件写入日志的简易记录器,掌握 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 中记录日志到本地文件,掌握了基本的文件操作和时间戳格式化,为构建更完善的日志系统打下基础。

相关推荐
陈随易7 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
云-缩影9 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
考虑考虑10 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨11 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
Patrick_Wilson12 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术12 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站12 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson12 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding13 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
苍何13 小时前
让 WorkBuddy 操控浏览器,干活有点猛啊1
后端