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

相关推荐
oliver_sys_log11 分钟前
RocketMQ 4.5.1 延迟消息"发送成功但消费不到"排查分析报告
后端·rocketmq
码上观网13 分钟前
VXLAN 中的 ARP 代答:从原理到 SONiC 代码实现
后端
计算机毕设定制辅导-无忧学长42 分钟前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端
摇滚侠43 分钟前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 JDBC 事务管理 阅读笔记 33
spring boot·笔记·后端
学长毕业设计1 小时前
基于SpringBoot的民间艺术传承管理系统(源码+文档+讲解视频)
java·spring boot·后端
小蒜学长1 小时前
基于Springboot+Vue的环保行动志愿者招募系统设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
用户233376852182 小时前
Ubuntu上fpm多架构打包实战
后端
JavaGuide2 小时前
轻量开源版 IDEA 来了!
前端·后端
Json____2 小时前
springboot开发高校选课管理系统:从零构建前后端分离的全栈实践
java·spring boot·后端·毕业设计·毕设·wwwoop.com
站大爷IP2 小时前
Python的列表推导式把我写崩了,原来圆括号和方括号不是一回事
后端