写Go最近踩的坑 | 日志、内聚和复用、gjson、调整心态

简介: 今天分享一下最近遇到的坑:以下代码示例使用GoFrame框架,下文简称为gf框架。

统一日志格式


我有个不好的习惯,不管是之前开发PHP,还是现在开发GO,都习惯在开发过程中使用dump()打印数据进行调试。

本地调试虽然爽了,但是上到测试环境,甚至开发环境查不到日志,无法方便的定位问题可就傻了。

所以,我们需要养成关键步骤打印日志的好习惯,而且要统一日志格式。


举个栗子


打印日志


scm.Log.Info("测试的日志都打印在这里,res:%v", res)


封装打印日志的方法


指定日志打印目录


var Log = g.Log().Path(g.Log().GetPath() + "/scm")


通过gf提供的 g.log,再加上我们自己的封装,就能把日志按功能模块进行区分,方便定位问题


内聚和复用


gf框架有一个设计:internal,即只允许内部调用的方法。

我觉得作者设计internal,一方面是处于安全考虑,另外一方面是处于高内聚的考虑。

但是,也不要过度内聚,我今天遇到的问题就是如何更好的实现代码复用。

所以在项目中抽取了公共方法目录shared,将原本写在internal中的可以复用的逻辑进行迁移。


gjson


今天发现一个非常好用的工具类:gjson

gjson 可以将json/xml/toml/等文件或者文件内容进行读取,创建对象,通过get方法可以取到对象对应的值


package main
import (
   "fmt"
   "github.com/gogf/gf/encoding/gjson"
)
func main() {
   jsonContent := `{"k5":1}`
   jsonObj, err := gjson.LoadContent(jsonContent)
   if err != nil {
      panic(err)
   }
   fmt.Println(jsonObj.Get("k5"))
}

打印结果

微信图片_20221112220830.png


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
115 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
5天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
8 1
|
6天前
|
Prometheus 监控 Cloud Native
【Go语言专栏】Go语言中的日志记录与监控
【4月更文挑战第30天】Go语言在软件开发和运维中扮演重要角色,提供灵活的日志记录机制和与多种监控工具的集成。内置`log`包支持基本日志记录,而第三方库如`zap`、`zerolog`和`logrus`则扩展了更多功能。监控方面,Go应用可与Prometheus、Grafana、Jaeger等工具配合,实现系统指标收集、可视化和分布式追踪。健康检查通过HTTP端点确保服务可用性。结合日志和监控,能有效提升Go应用的稳定性和性能。
|
7天前
|
Java Go API
Go语言企业级日志管理
Go语言企业级日志管理
15 0
|
5月前
|
JSON 缓存 Go
Go日志库-zap
Go日志库-zap
|
3月前
|
Go
Go整合Logrus实现日志打印
Go整合Logrus实现日志打印
34 1
|
5月前
|
消息中间件 JSON Go
Go日志库——logrus
Go日志库——logrus
|
5月前
|
存储 JSON API
微服务框架 go-zero logx 日志组件剖析
微服务框架 go-zero logx 日志组件剖析
|
18小时前
|
缓存 测试技术 持续交付
Golang深入浅出之-Go语言中的持续集成与持续部署(CI/CD)
【5月更文挑战第5天】本文介绍了Go语言项目中的CI/CD实践,包括持续集成与持续部署的基础知识,常见问题及解决策略。测试覆盖不足、版本不一致和构建时间过长是主要问题,可通过全面测试、统一依赖管理和利用缓存优化。文中还提供了使用GitHub Actions进行自动化测试和部署的示例,强调了持续优化CI/CD流程以适应项目需求的重要性。
27 1

热门文章

最新文章