文章源自【字节脉搏社区】-字节脉搏实验室
作者-S0u1
扫描下方二维码进入社区:
由于最近考试太多,回头想了一下自己以前学过的go语言。
淦,发现能够回想起来的知识点所剩无几,于是重新温习了一遍。
回到正题,这次将自己实现go语言中的日志库的思路在这里班门弄斧一下
日志库
日志能方便地诊断程序原因、统计程序运行数据,是大型软件系统必不可少的组件之一。
日志库输出方式
控制台输出
文件写入(支持文件切割)
日志库输出级别
debug、trace、info、warning、error、fartal
首先就是日志库结构
console:打印到控制台
file:写入到文件
mylogger:日志库公用函数
console.go
定义ConsoleLogger结构体,定义ConsoleLogger的构造函数
在构造函数里面主要就是通过传递过来的参数(日志级别)对创建一个consolelogger对象
parseloglevel函数就是将传递过来的字符串解析成对应的loglevel类型
接下来的几个函数就是将对应的日志内容打印到控制台,这个传递的msg就是日志内容
然后a变量就是用户的格式化输出参数。
由于每个日志级别都是打印到控制台,所以这里就不需要重复造轮子了
在log函数中会用到getLogInfo这个函数,这个函数的主要功能就是获取运行时调用getLogInfo的信息。
包括函数名、文件名、行号
在log函数还会用到一个函数就是unParseLogLevel函数(将LogLevel解析成string类型)方便在控制台打印日志级别信息
在console中还有一个功能就是级别开关(打印用户传递的级别以及此级别以下级别的日志信息)
测试console,创建一个demo进行测试
file.go
介绍完console之后再看看文件写入功能
这里就主要介绍file和console的不同之处
主要的不同还是在log函数上面,因为console是打印到控制台,而file就是写入到对应的文件当中
首先介绍以下fileLogger的结构信息
在fileLogger的构造函数中会调用文件初始化函数对日志存储文件进行初始化
在log中会日志文件的大小进行检查,判断日志文件的大小是否小于用户指定的文件大小,如果大于,就对文件进行切割
checksize函数就是判断文件大小的函数
splitFile函数就是对日志文件进行切割,将旧的日志文件进行重命名。
测试file功能
通知!
公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与
记得扫码
关注我们
本文分享自微信公众号 - 字节脉搏实验室(zijiemaiboshiyanshi)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。