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 中记录日志到本地文件,掌握了基本的文件操作和时间戳格式化,为构建更完善的日志系统打下基础。

相关推荐
silvamux_17 分钟前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年19 分钟前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign
UrbanJazzerati1 小时前
AutoHotkey v2 零基础快速入门 Part 3 像素亮度检测完全指南
后端
浮链序1 小时前
Shopify 把 10 亿商品开放给任意 agent 了:我用零依赖 Python 撸了个带预算闸门的代购网关
后端·代码规范
Qlly1 小时前
全栈工程师怎么接需求?从一句「加个功能」聊到能开发、能验收
前端·后端
马可家的菠萝1 小时前
你的微信“文件传输助手”,是不是已经成了第二个网盘?
前端·后端·架构
敲代码的玉米C1 小时前
编辑器开始懂 Git:改动、提交图和 worktree
go
敲代码的玉米C1 小时前
我想用 Go 写个编辑器,先把「轻量」这件事想明白
go
敲代码的玉米C1 小时前
让工作流接起来:文件拖放与 Git 冲突处理
go
敲代码的玉米C1 小时前
中文输入不是「能打出汉字」就算完成
go