1. 说明
- muduo的日志相关类
- 又是一个复杂的文件
- 日志类之间的关系:
Logger --> Impl --> LogStream --> operator<<FixedBuffer --> g_output --> g_flush
2. FixedBuffer类
0. 类说明
- data_指针指向数组头不变,cur_可变,相当于偏移
- end()就返回缓冲区的尾部指针
1. 变量
- data_
- 数组头指针
- cur_
- 当前位置指针,相当于偏移
- cookie_
- 回调函数
2. 函数
1. 普通
- 构造函数
- 数据初始化和设置cookie_函数
- 析构函数
- 设置cookie_函数
- append(const char* /*restrict*/ buf, size_t len)
- 把buf数据追加到data_后面
- data()
- 返回data_
- length()
- 返回使用的空间的长度
- current()
- 返回cur_
- avail()
- 返回可用空间的大小
- add(size_t len)
- 向后移动cur_指针
- reset()
- 另cur_指针指向数组头
- bzero()
- 把data_清空
- debugString()
- 返回当前用过的数据的字符串,代码很好理解,注释说是调试的时候用
- setCookie()
- 设置cookie_回调函数
- toString()
- 把data_数组转换成string类型返回
- toStringPiece()
- 返回StringPiece类型,这是个自定义类型,大致看了下,有啥用还不清楚,后面有用到再看
2. 私有
- end()
- 返回data_尾部的指针
- cookieStart()
- 静态,空函数,不知道啥用
- cookieEnd()
- 静态,空函数,不知道啥用
3. LogStream类
1. 变量
-
buffer_
- FixBuffer类型
-
kMaxNumericSize
- 静态常量,如名,记录一个数字转换成字符串可能占据的最大字符数
2. 函数
1. 普通
-
append(const char* data, int len)
- 调用buffer_的append()
-
buffer()
- 返回buffer_的引用
-
resetBuffer()
- 调用buffer_的reset()
-
重载<<运算符
- 参数为各种数据类型,总之就是把<<实现成往buffer_里写数据
2. 私有
- staticCheck()
- 编译期断言
- formatInteger(T)
- 把当参数传入的数字类型转换成字符串加到buffer_后面
- 这里使用了.cc文件中的convert函数,具体不细写了,代码不难
4. Fmt类
1. 变量
- buf_
- char数组
- length_
2. 函数
- 构造函数
- 控制把val加入到buf_中的格式,明白snprintf()函数的作用就很好理解了
- data()
- 返回buf_
- length()
- 返回length_
5. 其他
1. detail命名空间
- 两个常量
- kSmallBuffer
- kLargeBuffer,标识buf大小
- FixedBuffer类就在这个命名空间内
2. muduo命名空间
-
LogStream类和Fmt类在这个空间
-
formatSI(int64_t n)
- 格式数量单位为(k, M, G, T, P, E).
-
formatIEC(int64_t n)
- 格式数量单位为(Ki, Mi, Gi, Ti, Pi, Ei).