如何使用Golang log设置日志输出格式_Golang log日志格式示例


Go标准库log仅支持前缀开关和输出重定向,不支持结构化日志;需用zap等专用库实现JSON、level等字段化功能。

Go log.SetFlags() 控制日志前缀和格式

Go 标准库 log 包本身不支持自定义字段(如 JSON、level 字段),但能通过 log.SetFlags() 控制时间、文件名、行号等前缀开关。默认只输出内容,没时间戳——这是新手最常忽略的“日志看起来没格式”的原因。

  • log.Ldate | log.Ltime:输出类似 2025/05/12 14:23:56 message
  • log.Lshortfile:显示 main.go:23log.Llongfile 显示完整路径
  • 多个标志用按位或组合:log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
  • 设为 0 可完全禁用所有前缀,只留原始字符串

Go log.SetOutput() 重定向日志到文件或 stderr

默认输出到 os.Stderr,但容易和错误流混在一起。生产环境通常要写入文件,或区分 info/warn/error 流。注意:直接传 *os.File 是安全的,但别传已关闭的文件句柄,否则后续 log.Print() 会 panic 并报 write /dev/stderr: bad file descriptor

  • 写入文件:log.SetOutput(newFile),记得用 os.OpenFile(..., os.O_CREATE|os.O_APPEND|os.O_WRONLY)
  • 同时输出到控制台和文件?需封装 io.MultiWriter
  • 避免在 goroutine 中反复调用 SetOutput —— 它不是并发安全的,且会覆盖全局实例

为什么不要直接用标准 log 做结构化日志

当你需要 {"level":"info","msg":"user login","uid":1001} 这种格式时,log 包无能为力。它不解析内容,只拼接字符串前缀 + fmt.Sprint() 结果。强行用 log.Printf("{\"level\":\"info\",...}") 会导致转义混乱、无法统一字段顺序、缺失堆栈上下文。

  • 推荐替代方案:zap(高性能)、zerolog(零分配)、logrus(易上手)
  • 如果必须用标准库,可封装一个函数生成 JSON 字符串再交给 log.Print(),但无法享受结构化解析优势
  • 注意:log.SetPrefix() 只加固定前缀(如 [INFO]),不能动态插入变量
package main

import (
    "log"
    "os"
)

func main() {
    // 启用日期、时间、短文件名
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
    
    // 写入文件而非 stderr
    f, _ := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
    log.SetOutput(f)
    defer f.Close()
    
    log.Println("server started")
    log.Printf("listening on %s", ":8080")
}
标准库 log 的格式能力仅限于前缀开关和输出目标,真要字段化、分级、采样、Hook,得换专用日志库——这点在项目初期就该明确,别等到日志查不出问题才回头重构。


# js  # json  # go  # golang  # app  #   # ai  # 标准库  # 为什么  # print  # 封装  # Error  # printf  # 字符串  #   # 并发  # sprint  # 重构  # 结构化  # 不支持  # 行号  # 重定向  # 这是  # 多个  # 不出  # 句柄  # 当你  # 设为 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 新手学PHP架构总混淆概念咋办_重点梳理【教程】  php中::能用于接口静态方法吗_接口静态方法调用规则【操作】  如何在 Go 中正确测试带 Cookie 的 HTTP 请求  Windows11怎么自定义任务栏_Windows11任务栏自定义教程【步骤】  VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】  Win11怎么设置虚拟内存最佳大小_Windows11性能选项自定义分页文件  Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】  Mac自带的词典App怎么用_Mac添加和使用多语言词典【技巧】  如何在Golang中使用内置函数_Golanglen append make等使用技巧  Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】  电脑无法识别U盘怎么办 Windows磁盘管理与驱动更新修复识别问题【解决】  Win11怎样安装企业微信_Win11安装企业微信教程【步骤】  Win11怎么关闭透明效果_Windows11个性化颜色关闭透明  Win10如何卸载Skype_Win10卸载Skype步骤【步骤】  php8.4如何实现队列任务_php8.4redis队列简单实现方法【教程】  Win11怎么禁用键盘自带键盘_Win11笔记本禁用内置键盘方法【教程】  PHP怎么接收前端传的时间戳_处理时间戳参数转换技巧汇总【指南】  如何使用Golang实现函数指针_函数变量与回调示例  Win11怎么清理C盘虚拟内存_Win11清理虚拟内存设置【教程】  Win11怎么设置开机问候语_自定义Win11锁屏提示信息【技巧】  如何使用Golang template生成文本模板_动态生成HTML或文本  如何使用Golang recover捕获panic_防止程序崩溃并处理异常  c++输入输出流 c++ cin与cout格式化输出【方法】  PHP主流架构怎么监控运行状态_工具推荐【操作】  如何在Golang中编写端到端测试_Golang E2E测试流程示例  如何使用Golang配置安全开发环境_防止敏感信息泄露  Win11怎么退出高对比度模式_Win11取消反色显示快捷键【修复】  Windows10系统怎么查看IP地址_Win10网络连接状态详细信息  Win11怎么关闭自动调节屏幕亮度_Windows11禁用内容自适应亮度控制  Win11怎么关闭系统推荐内容_Windows11开始菜单布局设置  Win11任务栏天气怎么关闭 Win11隐藏天气小组件图标【设置】  Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】  C++友元类使用场景_C++类间协作设计方式讲解  如何使用Golang匿名函数_快速定义临时函数逻辑  如何在Golang中理解指针比较_Golang地址比较与相等判断  Windows10系统怎么查看设备管理器_Win10快捷键Win+X菜单使用  如何解决Windows字体显示模糊的问题?(ClearType设置)  php查询数据怎么导出csv_查询结果转csv文件保存【操作】  c++中explicit(bool)的用法 c++条件性explicit【C++20】  php下载安装后swoole扩展怎么安装_异步框架支持【汇总】  Python lxml的etree和ElementTree有什么区别  php485在macos下怎么配置_php485 macOS系统配置指南【解答】  c++20的std::format怎么用 比printf更安全高效的格式化方法【详解】  php订单日志怎么记录物流_php记录订单物流变更日志指南【指南】  Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】  Win11怎么恢复旧版开始菜单_通过软件还原Win10风格菜单【详解】  Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】  Win11怎么查看wifi信号强度_检测Windows 11无线网络质量方法【详解】  如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例  Win11怎么设置默认浏览器Chrome_Windows11修改默认网页打开方式 

 2026-01-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.