私は 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 の関数はありますか?