这次将自己实现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功能