Go日志库开发

  • A+
所属分类:安全开发

文章源自【字节脉搏社区】-字节脉搏实验室

作者-S0u1

扫描下方二维码进入社区

Go日志库开发

由于最近考试太多,回头想了一下自己以前学过的go语言。

淦,发现能够回想起来的知识点所剩无几,于是重新温习了一遍。

Go日志库开发

Go日志库开发

回到正题,这次将自己实现go语言中的日志库的思路在这里班门弄斧一下

Go日志库开发

Go日志库开发

日志库

日志能方便地诊断程序原因、统计程序运行数据,是大型软件系统必不可少的组件之一。

Go日志库开发

日志库输出方式

控制台输出

文件写入(支持文件切割)

Go日志库开发

日志库输出级别

debug、trace、info、warning、error、fartal

Go日志库开发

Go日志库开发

首先就是日志库结构

Go日志库开发

Go日志库开发

console:打印到控制台

file:写入到文件

mylogger:日志库公用函数

console.go

Go日志库开发

Go日志库开发

定义ConsoleLogger结构体,定义ConsoleLogger的构造函数

在构造函数里面主要就是通过传递过来的参数(日志级别)对创建一个consolelogger对象

parseloglevel函数就是将传递过来的字符串解析成对应的loglevel类型

Go日志库开发

Go日志库开发

Go日志库开发

接下来的几个函数就是将对应的日志内容打印到控制台,这个传递的msg就是日志内容

然后a变量就是用户的格式化输出参数。

Go日志库开发

Go日志库开发

由于每个日志级别都是打印到控制台,所以这里就不需要重复造轮子了

Go日志库开发

Go日志库开发

在log函数中会用到getLogInfo这个函数,这个函数的主要功能就是获取运行时调用getLogInfo的信息。

包括函数名、文件名、行号

Go日志库开发

Go日志库开发

在log函数还会用到一个函数就是unParseLogLevel函数(将LogLevel解析成string类型)方便在控制台打印日志级别信息

在console中还有一个功能就是级别开关(打印用户传递的级别以及此级别以下级别的日志信息)

Go日志库开发

Go日志库开发

测试console,创建一个demo进行测试

Go日志库开发

Go日志库开发

Go日志库开发

file.go

介绍完console之后再看看文件写入功能

Go日志库开发

Go日志库开发

这里就主要介绍file和console的不同之处

Go日志库开发

Go日志库开发

主要的不同还是在log函数上面,因为console是打印到控制台,而file就是写入到对应的文件当中

首先介绍以下fileLogger的结构信息

Go日志库开发

Go日志库开发

在fileLogger的构造函数中会调用文件初始化函数对日志存储文件进行初始化

Go日志库开发

Go日志库开发

在log中会日志文件的大小进行检查,判断日志文件的大小是否小于用户指定的文件大小,如果大于,就对文件进行切割

Go日志库开发

Go日志库开发

checksize函数就是判断文件大小的函数

splitFile函数就是对日志文件进行切割,将旧的日志文件进行重命名。

Go日志库开发

Go日志库开发

测试file功能

Go日志库开发

Go日志库开发

Go日志库开发

Go日志库开发

Go日志库开发

通知!

公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~

Go日志库开发

记得扫码

关注我们

本文始发于微信公众号(字节脉搏实验室):Go日志库开发

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: