spdlogをWindowsで使う

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 にしてコンパイルすれば、プログラムフットプリントサイズに影響しないので、完全にデバッグ専用として使う事もできそう。