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

相关推荐
IguoChan1 小时前
D2L(1) — 线性回归
后端
8***29311 小时前
Go基础之环境搭建
开发语言·后端·golang
梅花141 小时前
基于Django房屋租赁系统
后端·python·django·bootstrap·django项目·django网站
提笔了无痕1 小时前
go web开发表单知识及表单处理详解
前端·后端·golang·web
qq_12498707531 小时前
基于SpringBoot技术的企业请假审批管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·信息可视化·毕业设计
小哀21 小时前
🌸 入职写了一个月全栈next.js 感想
前端·后端·ai编程
ziwu1 小时前
【民族服饰识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·后端·图像识别
程序员Easy哥1 小时前
ID生成器第一讲:原理和常见几种生成器
后端
q***73551 小时前
SpringBoot中使用TraceId进行日志追踪
spring boot·后端·状态模式
Penge6661 小时前
Elasticsearch 跳表(Skip List):有序结果合并的 “性能电梯”
后端