Files
MyLogger/README.md
T

2.0 KiB

MyLogger

MyLogger 是用于 Qt 程序的进程级日志模块,接管 qDebug()qInfo()qWarning()qCritical()qFatal()

行为

  • 默认写入 {applicationDirPath}/logs,日志文件名为 yyyy-MM-dd_hhmmss_分卷号.log,例如 2026-07-14_153045_001.log
  • 单个文件最大 10 MiB,达到上限自动创建下一个分卷;仅清理本模块生成且超过 30 天的日志。
  • 普通日志最多每秒 flush 一次;qCritical()qFatal() 会立即 flush。
  • 安装时保存此前的 Qt 消息处理器,卸载时恢复它。Qt 每个进程只能有一个全局消息处理器,安装期间不要由其他模块再次调用 qInstallMessageHandler()

qmake:链接动态库

先构建 MyLogger.pro,然后在宿主工程中链接生成的库并包含头文件。不要再包含 MyLogger.pri

LIBS += -L$$PWD/Libs/MyLogger/build -lMyLogger
INCLUDEPATH += $$PWD/Libs/MyLogger

qmake:源码嵌入

不单独构建动态库时,可在宿主 .pro 中使用:

include($$PWD/Libs/MyLogger/MyLogger.pri)

源码嵌入与链接动态库只能二选一。

使用

Q(Core)Application 创建后、需要记录第一条 Qt 日志前安装;应用退出前卸载。

#include "loghandler.h"

if (!LogHandler::Get().installMessageHandler())
{
    // 日志目录不可用;应用可继续运行,也可在权限恢复后再次尝试安装。
}

qInfo() << "application started";

LogHandler::Get().uninstallMessageHandler();

单元测试

tests/MyLoggerTests.pro 使用 QtTest 直接编译日志源码,并通过仅测试可见的 MYLOGGER_TESTING 访问类把日志写入临时目录。

cd Libs/MyLogger/tests
qmake MyLoggerTests.pro
mingw32-make -j12
.\release\MyLoggerTests.exe

测试覆盖安装失败后的重试、旧 handler 恢复、UTF-8 内容、并发写入、分卷与过期日志清理。CMake 使用 -DBUILD_TESTING=ON 后可通过 ctest 执行同一套用例。