0

私は C ++ アプリケーションで spdlog を使用しています。ここでは、ログ プールを構築するクラスを作成し、プール内の可変コンテンツを使用しています。これは、常に同じであるとは限りません。コンソールのみ、1 つのファイルのみ、または同時に両方にログを保持する場合。

つまり、プールには、コンソールへのロガーとファイルへのロガー、または 2 つのうちの 1 つだけを含めることができます。

オプション 1: このコードでこの機能を取得しようとしましたが、コンパイルされず、push_back 関数をサポートしていないというエラーが表示されます。

    std::shared_ptr<spdlog::logger> MyClass::loggerPull;
    spdlog::sinks_init_list loggerList;
        
    if (logToUse == USE_CONSOLE)
      loggerList.push_back(myConsoleLog);
    else if (logToUse == USE_FILE)
      loggerList.push_back(myFileLog);
    else
    {
      loggerList.push_back(myConsoleLog);
      loggerList.push_back(myFileLog);
    }

    loggerPull = std::make_shared<spdlog::async_logger>("mylogger", loggerList.begin(), loggerList.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);

オプション 2: このコードはコンパイルして機能します。

    std::shared_ptr<spdlog::logger> MyClass::loggerPull;

    if (logToUse == LOG_TO_CONSOLE)
    {
      spdlog::sinks_init_list loggerList = { myConsoleLog };
      loggerPull = std::make_shared<spdlog::async_logger>("mylogger", loggerList.begin(), loggerList.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
    }
    else if (logToUse == LOG_TO_FILE)
    {
      spdlog::sinks_init_list loggerList = { myFileLog };
      loggerPull = std::make_shared<spdlog::async_logger>("mylogger", loggerList.begin(), loggerList.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
    }
    else
    {
      spdlog::sinks_init_list loggerList = { myConsoleLog, myFileLog };
      loggerPull = std::make_shared<spdlog::async_logger>("mylogger", loggerList.begin(), loggerList.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
    }

ただし、「if ... else if ...」の外でloggerListを定義し、必要なロガーをリストに追加するためにpush_backまたはinsertに似た関数を使用したいと思います.OPTION 1.

loggerList の宣言でリストを作成して埋めるのではなく、空の loggerList リストにロガーを追加できる spdlog の関数はありますか?

4

0 に答える 0