# 第三方库来源说明(spdlog) 本目录按**上游原样内置** spdlog 源码(`include/` 头文件 + `src/` 编译单元,保留上游字节,含换行符,不做编码/格式转换),与 `third_party/ormpp`、`third_party/toml` 同类处理:仓库自带依赖,离线可配置、可交付。 | 内容 | 本目录位置 | 上游 | 版本 / 标识 | |---|---|---|---| | spdlog(C++ 日志库) | `include/spdlog/**`(105 个文件 / 940,660 字节)、`src/*.cpp`(7 个文件 / 9,168 字节) | | tag `v1.17.0`(commit `79524ddd08a4ec981b7fea76afd08ee05f83755d`,2026-01-04);`include/spdlog/version.h` = 1.17.0 | | 内置 {fmt}(随 spdlog 内置,供格式化使用) | `include/spdlog/fmt/bundled/**`(23 个文件) | 随 spdlog 内置;独立仓库 | {fmt} 12.1.0(spdlog v1.17.0 的 bundled 版本;未启用 `SPDLOG_FMT_EXTERNAL`) | | 许可证 | `LICENSE` | — | MIT License(上游原文,1,323 字节) | 关键文件校验(与上游 v1.17.0 tarball 一致,可用下方复现步骤复核): | 文件 | 字节数 | SHA-256 | |---|---|---| | `include/spdlog/version.h` | 417 | `a0c15d9295eba580732dada20940a443c53ddb47d8565c730d7af1ee5f3bd712` | | `include/spdlog/spdlog.h` | 11,866 | `54283b3e3bf96c3d…`(前 16 位) | | `include/spdlog/common.h` | 12,569 | `ddf4fa8ee4687f36…`(前 16 位) | | `include/spdlog/fmt/bundled/format-inl.h` | 81,008 | `e7baf108b84e89b29915bb35733540f8f4262cd8f4b41c15754eed4d2f185f61` | | `LICENSE` | 1,323 | `d678c20826e13925…`(前 16 位) | > 说明:只保留使用所需的 `include/` 与 `src/`(上游 `tests/`、`bench/`、`example/`、`cmake/`、`scripts/`、`logos/`、`.github/` 等均不需要);`include/` + `src/` + `LICENSE` 共 **113 个文件 / 951,151 字节**(上游 v1.17.0 源码 tarball `spdlog-1.17.0.tar.gz` = 281,801 字节)。 ## 复现步骤(重新获取/升级时执行) ```bat :: 在临时目录执行(本机全局 core.autocrlf=true 会把文本转成 CRLF,必须显式关闭) git -c core.autocrlf=false clone --depth 1 --branch v1.17.0 https://github.com/gabime/spdlog.git :: 仅拷贝以下内容到本目录(其余目录不需要): :: \include\ -> third_party\spdlog\include\ :: \src\ -> third_party\spdlog\src\ :: \LICENSE -> third_party\spdlog\LICENSE ``` 或直接使用官方 tag 源码包(推荐,字节与上述 tarball 一致): ```bat :: https://codeload.github.com/gabime/spdlog/tar.gz/refs/tags/v1.17.0 :: 解压后同样只拷贝 include\、src\、LICENSE ``` 校验方式:`include/` 105 个文件 / 940,660 字节、`src/` 7 个文件 / 9,168 字节,且 `include/spdlog/version.h` 的 SHA-256 为 `a0c15d92…f3bd712`;本目录所有文件保持 **LF** 换行(上游字节,不转 CRLF/BOM)。 ## 使用方式与约束 - **仅由日志模块 `data_process_class_dll/rdp_log.h`(经 `rdp_log.cpp`、各业务模块的 `RDP_LOG_*` 宏)使用**。 - 以**静态库**方式编译:根目录 `CMakeLists.txt` 定义目标 `spdlog`(`third_party/spdlog/src/*.cpp`,`SPDLOG_COMPILED_LIB`),链接进 `data_process_class_dll`;`rdp_record` 静态库(C++20,`rdp_record.cpp` 内也有日志)同样链接该目标。头文件包含路径与 `SPDLOG_COMPILED_LIB` / `SPDLOG_ACTIVE_LEVEL` 编译定义由该目标的 **PUBLIC** 接口传递给使用方。 - **编译期日志级别**:spdlog 的 `SPDLOG_ACTIVE_LEVEL` 由 CMake 选项 `RDP_LOG_LEVEL`(AUTO/TRACE/DEBUG/INFO/WARN/ERROR/CRITICAL/OFF)映射,AUTO 时 Debug = TRACE、其余 = INFO;低于该级别的 `RDP_LOG_*` 调用在编译期被剔除(实参不求值)。配置方式见 `README.md` 4.3、10.4。 - **告警处理**:第三方源码以目标级 `/w` 编译,本项目源码包含其头文件处用 `#pragma warning(push, 0)` / `(pop)` 包裹(`rdp_log.h`),维持 README 4.5 的 `/W3` 零告警约定;这是本目录作为第三方依赖的唯一例外。 - **升级方式**:整目录替换为新的上游快照,同步更新本文件的版本 / commit / 校验值,然后必须重新验证:4 个配置(Release/Debug × REC_OFF/REC_ON)构建通过(0 warning)+ 日志双写(标准输出 + `rdp_logs` 文件)、按日期+时间命名/同秒 `_1` 后缀、`RDP_LOG_LEVEL` 编译期过滤等运行期行为(见 README 10.4)。