「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
生命不息,学习不止
题外话
今天是元宵节,这里祝广大掘金网友以后的身材都和汤圆一样,又白又圆,哈哈哈哈哈,昨天的情人节大家过的怎么样,是不是都很美好呢?嘿嘿嘿……
废话不多说,上货
开源项目——go-gin-api
go-gin-api
这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。
main.go
别问我为什么下面都是波浪线,因为我手欠把项目删除了,这是新clone下来的,着急写嘛将就一下而已啦
import中包含了导入的相关包,包括了内置包(未飘红的)和第三方包(飘红的),怎么样,这下感谢我着飘红的线了吧
还是这张图,context包还没有讲完,还得用呢……
第三方包
这几个包就是已经封装好并发布了相关文档的第三方包,可以直接引用,或者导入并添加或 修改相关代码,以符合自己项目的业务
main.go 代码解析
终于到了真正读代码的环节了,上代码
main函数就不多说了,程序入口
accessLogger, err := logger.NewJSONLogger{
这里是初始化了一个access日志的json格式日志记录器,日志的实体是zap的logger,一下是NewJSONLogger函数的部分代码,我会在后面详细讲解
logger.WithDisableConsole(),
logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
logger.WithTimeLayout(timeutil.CSTLayout),
logger.WithFileP(configs.ProjectAccessLogFile),
这四个logger调用的函数分别设置了日志的开启,日志写入内容,日志时间格式,日志写入文件存放位置
日志写入的内容是配置文件中的项目名称和当前配置环境变量
日期的格式如下
const CSTLayout = "2006-01-02 15:04:05"
日志文件路径logs/go-gin-api-access.log
最终在日志文件中呈现的相关结果入下
if err != nil {
panic(err)
}
声明完日志实体后,就是一个错误判断
因为go中没有try catch或者类似java中thorw一个错误的方式,所以一般都是使用panic()函数来实现错误宕机
panic()参数可以是任意类型的,所以可以传入自定义的错误类型
继续main.go中的代码,如下
之后以相同的方式初始化了一个cronlogger,区别就是写入日志的文件不同,这里就不再赘述了,效果如下
这里说一下这个level,level是日志的等级,可以手动设置,默认级别是info,还有debug,warn,error级别,debug级别最高,error级别最低,越高日志结果越详细,大家应该也都知道。
可在初始化时通过一下函数进行更改
如声明一个error级别的日志
errLogger, err := logger.NewJSONLogger(
logger.WithErrorLevel()
)
日志模块最后是一个同步函数,如下
调用了底层内核Sync()函数,刷新所有缓冲日志条目,就以为这这一步因该在程序结束前最后触发,所以采用了defer 关键字
被defer关键字修饰的函数延迟触发,当有多个defer修饰的函数是,会按栈的方式执行,先声明的最后执行。
下回预告
下一回就到了初始HTTP服务的地方了,也是其中比较重要的一部分了。
下一篇就讲,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!