Go标准库log仅支持前缀开关和输出重定向,不支持结构化日志;需用zap等专用库实现JSON、level等字段化功能。
Go 标准库 log 包本身不支持自定义字段(如 JSON、level 字段),但能通过 log.SetFlags() 控制时间、文件名、行号等前缀开关。默认只输出内容,没时间戳——这是新手最常忽略的“日志看起来没格式”的原因。
log.Ldate | log.Ltime:输出类似 2025/05/12 14:23:56 message
log.Lshortfile:显示 main.go:23;log.Llongfile 显示完整路径log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
0 可完全禁用所有前缀,只留原始字符串默认输出到 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
SetOutput —— 它不是并发安全的,且会覆
盖全局实例当你需要 {"level":"info","msg":"user login","uid":1001} 这种格式时,log 包无能为力。它不解析内容,只拼接字符串前缀 + fmt.Sprint() 结果。强行用 log.Printf("{\"level\":\"info\",...}") 会导致转义混乱、无法统一字段顺序、缺失堆栈上下文。
zap(高性能)、zerolog(零分配)、logrus(易上手)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
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。