# MyLogger MyLogger 是用于 Qt 程序的进程级日志模块,接管 `qDebug()`、`qInfo()`、`qWarning()`、`qCritical()` 和 `qFatal()`。 ## 行为 - 默认写入 `{applicationDirPath}/logs`,日志文件名为 `yyyy-MM-dd_进程号_分卷号.log`。 - 单个文件最大 10 MiB,达到上限自动创建下一个分卷;仅清理本模块生成且超过 30 天的日志。 - 普通日志最多每秒 flush 一次;`qCritical()` 和 `qFatal()` 会立即 flush。 - 安装时保存此前的 Qt 消息处理器,卸载时恢复它。Qt 每个进程只能有一个全局消息处理器,安装期间不要由其他模块再次调用 `qInstallMessageHandler()`。 ## qmake:链接动态库 先构建 `MyLogger.pro`,然后在宿主工程中链接生成的库并包含头文件。不要再包含 `MyLogger.pri`。 ```pro LIBS += -L$$PWD/Libs/MyLogger/build -lMyLogger INCLUDEPATH += $$PWD/Libs/MyLogger ``` ## qmake:源码嵌入 不单独构建动态库时,可在宿主 `.pro` 中使用: ```pro include($$PWD/Libs/MyLogger/MyLogger.pri) ``` 源码嵌入与链接动态库只能二选一。 ## 使用 在 `Q(Core)Application` 创建后、需要记录第一条 Qt 日志前安装;应用退出前卸载。 ```cpp #include "loghandler.h" if (!LogHandler::Get().installMessageHandler()) { // 日志目录不可用;应用可继续运行,也可在权限恢复后再次尝试安装。 } qInfo() << "application started"; LogHandler::Get().uninstallMessageHandler(); ``` ## 单元测试 `tests/MyLoggerTests.pro` 使用 QtTest 直接编译日志源码,并通过仅测试可见的 `MYLOGGER_TESTING` 访问类把日志写入临时目录。 ```powershell cd Libs/MyLogger/tests qmake MyLoggerTests.pro mingw32-make -j12 .\release\MyLoggerTests.exe ``` 测试覆盖安装失败后的重试、旧 handler 恢复、UTF-8 内容、并发写入、分卷与过期日志清理。CMake 使用 `-DBUILD_TESTING=ON` 后可通过 `ctest` 执行同一套用例。