Post

spdlog code reading

spdlog的代码走读,记录一下用到的参考资料

logger订制程度看起来是ok的,wiki-custom-format上写的, 我感觉有线程号 + 时间 + 文件行其实我就够了。

日式文件的类型扩展充分,wiki-sinks里面也放了很多种,我觉得基本有文件rotate就够了。

支持的日志模式,同步/异步,阻塞/非阻塞,单线程/多线程

spdlog主要由logger(也包括async_logger)、sink、formatter、registry这四个部分组成

参考ref-2, 里面主要的文件:

  • spdlog/spdlog.h 为日志库接口,提供日志宏的属性控制函数。
  • spdlog/logger.h 为日志管理器,为前后端连接的枢纽。
  • spdlog/async.h 为异步模式接口。
  • spdlog/sinks/base_sink.h 为日志文件格式父类,后面所有的日志文件格式都是继承该类来实现不同功能。
  • spdlog/sinks/registry.h 用于登记所有的logger,及一些默认的属性,如日志格式、日志写入等级。

logger(sync/async)负责日志的格式化,sink负责日志的输出。sync的log_msg会直接给到sink,async的log_msg先给到async_logger,然后async_logger再给到sink。formatter负责将log_msg对象中的信息转换成字符串,例如将等级、时间、实际内容等。时间的格式和精度、等级输出显示的颜色等都是由formatter决定的。支持用户自动以格式。

registry负责logger的管理,销毁,获取。当然你也可以通过这个对logger做一些设置,看起来就是个大单例。

REF

1. spdlog github

2. spdlog 基本结构分析

3. spdlog源码解析(上)

4. spdlog源码解析(中)

5. spdlog源码解析(下)

5. C++定时器与线程池的实现与详解

6. 日志的一些bench

This post is licensed under CC BY 4.0 by the author.

Trending Tags