Go语言日志内聚复用及gjson踩坑记录分享
目录
- 统一日志格式
- 打印日志
- 封装打印日志的方法
- 内聚和复用
- 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")) }
打印结果
最近又在解决很坑人的问题,一直没能静下心来,总是想着一定是哪些小问题导致的,总想着快速解决问题。但是这种谋求快速解决问题的心理导致一直浮在问题表面,没有从根本上解决问题,反而一直在拖进度,让进度越来越慢。
以上就是Go语言日志内聚复用及gjson踩坑记录分享的详细内容,更多关于Go日志内聚复用gjson踩坑的资料请关注我们其它相关文章!
相关推荐
-
详解配置Django的Celery异步之路踩坑
人生苦短,我用python. 看到这句话的时候,感觉可能确实是很深得人心,不过每每想学学,就又止步,年纪大了,感觉学什么东西都很慢,很难,精神啊注意力啊思维啊都跟不上.今天奶牛来分享自己今天踩的一个坑. 先说说配置过程吧,初学Django,啥都不懂,当然,python也很水,啥东西都得现查现用.Django安装还是很简单的. apt-get install python3 pip3 install django 嗯,就是两条命令的事儿. 再说celery的安装: pip3 install cel
-
Golang的strings.Split()踩坑记录
目录 背景 场景 前置 排查 验证 打印底层信息 追源码 类似情况 总结 背景 工作中,当我们需要对字符串按照某个字符串切分成字符串数组数时,常用到strings.Split() 最近在使用过程中踩到了个坑,后对踩坑原因做了分析,并总结了使用string.Split可能踩到的坑.最后写本篇文章做复盘总结与分享 场景 当时是需要取某个结构体的某个属性,并将其按,切分 整体逻辑类似这样的 type Info struct{ Ids string // Ids: 123,456 } func test
-
Django model重写save方法及update踩坑详解
一个非常实用的小方法 试想一下,Django中如果我们想对保存进数据库的数据做校验,有哪些实现的方法? 我们可以在view中去处理,每当view接收请求,就对提交的数据做校验,校验不通过直接返回错误,不写数据库,校验通过再调用create或update方法写入数据库 以上方式比较简单,容易理解,但随之又带来了麻烦,我们需在所有接收数据的地方都要去校验,那么有没有更加优雅的方式呢?如果你看过我之前的文章『Django使用Signals监测model字段变化发送通知』]就能想到可以通过signals
-
浅谈golang fasthttp踩坑经验
一个简单的系统,结构如下: 我们的服务A接受外部的http请求,然后通过golang的fasthttp将请求转发给服务B,流程非常简单.线上运行一段时间之后,发现服务B完全不再接收任何请求,查看服务A的日志,发现大量的如下错误 从错误原因看是因为连接被占满导致的.进入服务A的容器中(服务A和服务B都是通过docker启动的),通过netstat -anlp查看,发现有大量的tpc连接,处于ESTABLISH.我们采用的是长连接的方式,此时心里非常疑惑:1. fasthttp是能够复用连接的,为什
-
将django项目部署到centos的踩坑实战
前言 本文介绍的是将django项目部署到centos的遇到的一些问题,关于将Django项目部署到CentOs服务器中的步骤可以参考这篇文章:https://www.jb51.net/article/149135.htm FAQ1:在使用pip3安装库的时候,提示需要升级pip pip3 install --upgrade pip FAQ2:在创建软链接时,提示:ln: failed to create symbolic link '/usr/bin/python3': File exists
-
Go语言日志内聚复用及gjson踩坑记录分享
目录 统一日志格式 打印日志 封装打印日志的方法 内聚和复用 gjson 今天分享一下最近遇到的坑: 以下代码示例使用GoFrame框架,下文简称为gf框架. 统一日志格式 我有个不好的习惯,不管是之前开发PHP,还是现在开发GO,都习惯在开发过程中使用dump()打印数据进行调试. 本地调试虽然爽了,但是上到测试环境,甚至开发环境查不到日志,无法方便的定位问题可就傻了. 所以,我们需要养成关键步骤打印日志的好习惯,而且要统一日志格式. 打印日志 scm.Log.Info("测试的日志都打印在这
-
Linux/Docker 中使用 System.Drawing.Common 踩坑记录分享
前言 在项目迁移到 .net core 上面后,我们可以使用 System.Drawing.Common 组件来操作 Image,Bitmap 类型,实现生成验证码.二维码,图片操作等功能.System.Drawing.Common 组件它是依赖于 GDI+ 的,然后在 Linux 上并没有 GDI+,面向谷歌编程之后发现,Mono 团队使用 C语言 实现了GDI+ 接口,提供对非Windows系统的 GDI+ 接口访问能力,这个应该就是libgdiplus.所以想让代码在 linux 上稳定运
-
使用Gorm操作Oracle数据库踩坑记录
目录 下载依赖 项目结构 编辑go.mod将gorm降级 定义model类型 连接数据库 测试运行 gorm是目前用得最多的go语言orm库,但是目前gorm官方并不支持oracle的驱动,需要用到第三驱动,最近有个项目要往oracle写数据,记录一下踩到的坑 下载依赖 go get github.com/cengsin/oracle 这个驱动与最新的gorm库不匹配,要将gorm降级到1.21版本,不然会出现“......github.com/cengsin/oracle@v1.0.0/ora
-
Web Worker线程解决方案electron踩坑记录
目录 初始化项目 编写入口文件和 electron 插件 websocket websocket 服务 连接 websocket 服务 发送心跳 取消心跳 重新连接 其它优化 Worker 初始化项目 electron 开发时会遇到一对多的情况,在进行 websocket 通信时,如果接收到服务端多个指令时,而这个指令刚好需要占用线程,这个时候整个界面就会失去响应,那么我们就可以使用线程来解决这个问题. npm create vite@latest electron-worker 执行完后修改
-
.net core 3.1在iis上发布的踩坑记录
前言 写这篇文章的目的是希望像我一样喜欢.net 的人在发布 core到 iis上时少走点弯路 网上找了些资料,其实实际操作比较简单,就是有几个坑很恶心 踩坑记录 首先是你的服务器需要有core 的运行环境,安装前先关闭iis dotnet-hosting-3.1.4-win.exe 可以去微软的官网找最新的版本(去微软的官网找你要的版本就好了) 安装成功后,第一个坑出现了,启动iis,发现原来在iis上的网站都报503错误了. 直接玩大了,最后发现就是这个东西搞的鬼,你卸载它iis之前的网站就
-
Java踩坑记录之Arrays.AsList
前言 java.util.Arrays的asList方法可以方便的将数组转化为集合,我们平时开发在初始化ArrayList时使用的比较多,可以简化代码,但这个静态方法asList()有几个坑需要注意: 一. 如果对集合使用增加或删除元素的操作将会报错 如下代码: List list = Arrays.asList("a","b","c"); list.add("d"); 输出结果: Exception in thread &q
-
Java踩坑记录之BigDecimal类
前言 在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类.而平常我们开发中使用最多的float和double只能适用于一般的科学和工程计算,如果要在比较精确的计算方面如货币,那么使用float和double会相应的丢失精度,因此用于精密计算大数字的类BigDecimal就必不可少了.所以BigDecimal适合商业计算场景,用来对超过16位有效位的数进行精确的运算.但是BigDecimal的使用并不像float和double那样,使
-
关于python scrapy中添加cookie踩坑记录
问题发现: 前段时间项目中,为了防止被封号(提供的可用账号太少),对于能不登录就可以抓取的内容采用不带cookie的策略,只有必要的内容才带上cookie去访问. 本来想着很简单:在每个抛出来的Request的meta中带上一个标志位,通过在CookieMiddleware中查看这个标志位,决定是否是给这个Request是否装上Cookie. 实现的代码大致如下: class CookieMiddleware(object): """ 每次请求都随机从账号池中选择一个账号去访
-
python中remove函数的踩坑记录
摘要: 在python的使用过程中,难免会遇到要移除列表中对象的要求.这时可以使用remove函数. 对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素. 语法 list.remove() 参数 obj 参数:从列表中删除的对象的索引 返回值 删除后不会返回值 常见用法: a = [1,2,3,4],a.remove(1),然后a就是[2,3,4]:对于a = [1,1,1
-
Echarts在Taro微信小程序开发中的踩坑记录
背景 近期笔者在使用Taro进行微信小程序开发,当引入Echarts图表库时,微信检测单包超限2M的一系列优化措施的踩坑记录,期望能指导读者少走一些弯路. 为什么选择Echarts? 微信小程序目录市面上使用最多的两款图表库,如下: echarts-for-weixin--echarts微信小程序版本 wx-charts--基于微信小程序的图表库 对比两款图表库优缺点刚好相反. echarts-for-weixin:功能强大,但体积非常大 wx-charts:功能相对简单,但体积小 由于笔者对e
随机推荐
- 一个简单的ASP.NET验证码
- VBScript 文件操作代码小结
- Java IO流 文件的编码实例代码
- java实现将文件上传到ftp服务器的方法
- ASP.NET调用WebService服务的方法详解
- php用header函数实现301跳转代码实例
- 关于背包问题的一些理解和应用
- Android动画之3D翻转效果实现函数分析
- javascript获取flash版本号的方法
- php5中date()得出的时间为什么不是当前时间的解决方法
- javascript输出AscII码扩展集中的字符方法
- 微信小程序实现顶部普通选项卡效果(非swiper)
- DOS 下的批处理文件
- 360安全卫士 3.0 正式版下载
- Jquery 分页插件之Jquery Pagination
- jquery禁用右键单击功能屏蔽F5刷新
- JS实现网页游戏中滑块响应鼠标点击移动效果
- 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
- Java文件上传下载、邮件收发实例代码
- 如何打开注册表编辑器