首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
Golang日志格式化输出方法详解与选项对比

Golang日志格式化输出方法详解与选项对比

热心网友
36
转载
2026-05-07

在Golang中定制你的日志输出格式

处理日志时,你是否觉得默认的输出格式不够用?别担心,Golang的log包提供了相当灵活的格式化能力。核心就在于两个方法:SetFlagsSetPrefix。通过它们,你可以轻松调整日志的前缀和内容格式。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

基础格式选项:组合你的日志样式

log包预定义了几个常用的格式常量,你可以像搭积木一样,用按位或操作符(|)把它们组合起来。常用的选项有这么几个:

  1. log.Ldate: 显示当前日期。
  2. log.Ltime: 显示当前时间。
  3. log.Llongfile: 显示完整的文件名和行号,方便定位代码。
  4. log.Lshortfile: 只显示文件名(不含完整路径),更简洁。
  5. log.LUTC: 使用UTC时间而非本地时间,这在分布式系统中很有用。

举个例子,如果你希望日志条目同时包含日期、时间以及具体的代码位置,可以这样设置:

package main

import (
    "log"
)

func main() {
    log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
    log.Println("这是一条日志信息")
}

运行后,日志输出就会包含类似“2023/10/27 14:35:02 /path/to/main.go:10: 这是一条日志信息”的详细信息。

进阶玩法:实现自定义格式化器

当然,预定义的选项可能无法满足所有场景,比如你需要将日志输出为JSON格式以便接入ELK等日志分析系统。这时,就需要祭出自定义log.Formatter接口这个大招了。

下面是一个将日志输出为JSON格式的典型实现:

package main

import (
    "encoding/json"
    "log"
    "os"
    "time"
)

type JSONFormatter struct{}

func (f JSONFormatter) Format(entry *log.Entry) ([]byte, error) {
    record := struct {
        Time        string                 `json:"time"`
        Level       string                 `json:"level"`
        Message     string                 `json:"message"`
        Stacktrace  []string               `json:"stacktrace,omitempty"`
        Additional  map[string]interface{} `json:"additional,omitempty"`
    }{
        Time:       entry.Time.Format(time.RFC3339),
        Level:      entry.Level.String(),
        Message:    entry.Message,
        Additional: entry.Data,
    }
    if len(entry.Stacktrace) > 0 {
        record.Stacktrace = entry.Stacktrace
    }
    return json.Marshal(record)
}

func main() {
    logger := log.New(os.Stdout, "", log.LstdFlags)
    logger.SetFormatter(JSONFormatter{})
    logger.Println("这是一条日志信息")
}

这段代码的脉络很清晰:我们定义了一个JSONFormatter结构体,并实现了Format方法。在这个方法里,我们把日志条目(包含时间、级别、消息等字段)重新组织成一个结构体,然后通过json.Marshal将其序列化为标准的JSON字符串。最后,创建一个新的log.Logger实例,并将它的格式化器设置为我们自定义的JSONFormatter。这样一来,所有通过这个logger输出的日志,都会自动变成机器易读、结构清晰的JSON格式。

通过这两种方式——基础选项的组合与自定义格式化器的实现——你基本上就能应对Golang项目中的各种日志格式化需求了。选择哪种,完全取决于你的实际应用场景和复杂度要求。

来源:https://www.yisu.com/ask/5007925.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

dhclient和ifconfig网络配置命令功能区别详解
编程语言
dhclient和ifconfig网络配置命令功能区别详解

dhclient 与 ifconfig:网络配置的两种不同路径 在 Linux 的世界里,管理网络就像是打理一个复杂的交通系统。你既可以选择让系统自动分配“车道”和“信号灯”,也可以亲自上手,精细规划每一个路口。今天要聊的 dhclient 和 ifconfig,就代表了这两种截然不同的网络配置哲学

热心网友
05.07
Linux系统下有哪些好用的JavaScript调试工具推荐
编程语言
Linux系统下有哪些好用的JavaScript调试工具推荐

Linux下JS调试工具推荐 在Linux环境下进行Ja vaScript开发,调试环节的效率直接决定了问题排查的速度。面对从浏览器前端到Node js后端,再到移动端WebView的各类场景,选对工具往往能事半功倍。下面这份清单,希望能帮你快速找到最适合你的“手术刀”。 核心工具清单 Chrome

热心网友
05.07
Linux系统下JavaScript性能优化的实用技巧指南
编程语言
Linux系统下JavaScript性能优化的实用技巧指南

在Linux环境下优化Ja vaScript代码,可以遵循以下技巧: 想让你的Ja vaScript在Linux服务器上跑得更快、更稳?这不仅仅是选择Node js版本那么简单,从代码编写习惯到部署策略,都有不少可以打磨的细节。下面这些经过实践检验的技巧,或许能给你带来一些启发。 1 拥抱现代Ja

热心网友
05.07
ThinkPHP版本升级在Linux系统中的详细操作指南
编程语言
ThinkPHP版本升级在Linux系统中的详细操作指南

Linux下 ThinkPHP 升级实操指南 升级框架,尤其是跨主版本,总让人有点心里打鼓。别担心,只要准备充分、步骤清晰,整个过程完全可以平滑可控。下面这份实操指南,将带你一步步走完从准备到上线的全过程。 一 升级前准备 磨刀不误砍柴工,升级前的准备工作至关重要,能帮你避开大部分“坑”。 备份与版

热心网友
05.07
ThinkPHP应用在Linux服务器上的性能监控实践指南
编程语言
ThinkPHP应用在Linux服务器上的性能监控实践指南

总体思路 面向ThinkPHP在Linux环境下的性能监控,一个行之有效的策略是构建“三层联动”的观测体系: 应用层:在框架内部进行埋点,精准记录每一次请求的耗时、执行的SQL、内存峰值以及异常情况。 系统层:借助Linux原生命令与专业工具,持续观测服务器底层的CPU、内存、磁盘I O及网络等核心

热心网友
05.07

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

小牛电动车充电口防水性能实测与设计详解
电脑教程
小牛电动车充电口防水性能实测与设计详解

小牛电动车充电口防水设计解析 说到小牛电动车的充电口,你会发现主流车型都配备了基础的防水设计。比如,GOVA F0把充电接口藏在了座垫前端的下方,还加了个透明的防护盖;而G400T呢,则把带盖的充电口集成在了前面储物盒的左侧。其实,眼下在售的不少车型都采用了类似思路——一个可开合的物理防护盖,配上密

热心网友
05.07
鼠标宏快捷键无效的开启关闭与解决方法
电脑教程
鼠标宏快捷键无效的开启关闭与解决方法

鼠标宏的开启与关闭必须通过品牌官方驱动软件完成,无法依赖系统级通用设置或硬件盲操作。 你得知道,鼠标宏的开关,真不是靠系统设置或者硬件上瞎按几下就能搞定的,这事儿必须过官方驱动这一关。以罗技G系列为例,整个流程很明确:先安装好Logitech G HUB,等它识别出你的设备,然后到按键配置页面,给指

热心网友
05.07
小米移动电源开关机及充电操作指南
电脑教程
小米移动电源开关机及充电操作指南

小米移动电源开关与启停全攻略:物理按键、智能感知与无线控制 想快速用上充电宝的电,或者想让它安静休眠节省电量?其实答案,就在那个小小的电源按键上。小米移动电源的开关机逻辑,可以说是兼顾了极简操作与智能管理,我们常听到的“无感交互”理念,在这里体现得淋漓尽致。下面咱们就来拆解一下,从基础操作到高级玩法

热心网友
05.07
重置TPLink路由器是否会导致宽带账号丢失
电脑教程
重置TPLink路由器是否会导致宽带账号丢失

是的,恢复出厂设置后,TP-Link路由器里的宽带账号密码会被清空 没错,一旦执行了恢复出厂设置,你保存在TP-Link路由器里的宽带账号和密码就会被彻底抹掉。这个操作可不是简单地重置一下Wi-Fi名字或者管理员密码,而是来了一次“大扫除”——WAN口配置、PPPoE拨号信息、你设置过的端口映射,还

热心网友
05.07
电动车充电桩安装申请流程详解
电脑教程
电动车充电桩安装申请流程详解

家用充电桩安装指南:从申请到通电的全流程解析 没错,在自家车位上安装充电桩,主要绕不开三个环节:向供电公司申请用电、取得物业许可、最后完成装表接电。这事儿听起来有点繁复,但得益于这两年明确的政策引导,整个流程已经顺畅多了。国家能源局和住建部联合发布的文件,核心就是简化手续、保障权利。现在,车主只需准

热心网友
05.07