C++ 用の超高速で多機能でヘッダオンリー(ヘッダだけ持ってくれば動く)な Logging ライブラリ。
spdlog
https://github.com/gabime/spdlog
Windows で雑に触ってみた結果、かなり良さげな印象。
とりあえず画面に出したいので出力先のコンソールを作る。
// コンソールを作成する(CodePageをUTF8にする) AllocConsole(); SetConsoleOutputCP(CP_UTF8); // Ctrl+Cでアプリケーションを終了させずにコンソールだけ閉じるようにする SetConsoleCtrlHandler([](DWORD dwCtrlType) -> BOOL { if (dwCtrlType == CTRL_C_EVENT) { FreeConsole(); return TRUE; } return FALSE; }, TRUE); // コンソールウィンドウのメニューから閉じる機能を外す HMENU hmenu = GetSystemMenu(GetConsoleWindow(), FALSE); RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
プリコンパイルヘッダ stdafx.h あたりに spdlog のヘッダを突っ込んでおく
// spdlogに対してWideCharを受け付け可能にする #define SPDLOG_WCHAR_TO_UTF8_SUPPORT #define SPDLOG_WCHAR_FILENAMES // 出力ログレベルを設定する(Releaseモードではすべて外す) #ifdef _DEBUG #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE #else #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_OFF #endif // ヘッダの導入は上記の定義の後にする事 #include <spdlog/spdlog.h>
ログを記録したい個所にコードを加えていく。
SPDLOG_INFO("Starting Program..."); SPDLOG_TRACE("fall through"); SPDLOG_DEBUG(L"何もしてないのに変わった変数:{}", nazoprm); SPDLOG_CRITICAL("Critical Error. code:{} reason:{}", error_id, error_criteria);
コンソール出力にちゃんと色も付くね。
ただの Console ウィンドウなので、フォントやサイズはプロパティから変更すれば良い。
SPDLOG_* 系のマクロだけを使っている場合、SPDLOG_LEVEL_OFF にしてコンパイルすれば、プログラムフットプリントサイズに影響しないので、完全にデバッグ専用として使う事もできそう。