如何在同一个程序中多次启动和关闭 spdlog?
How to start and shutdown spdlog multiple times in the same program?
我正在使用 spdlog 运行 记录 Visual Studio 中的托管和非托管代码。出于这个原因,我编写了 shell classes 在后台使用 spdlog。
但是,我 运行 我的单元测试遇到了问题。我的单元测试 运行 在单个可执行文件中,因此我需要多次停止并重新启动 spdlog 记录器和日志文件。
我该怎么做?我在 class 中使用此代码来当前在 Windows DLL:
中启动 spdlog 实例
private:
API static std::mutex _mutex;
API static std::shared_ptr<spdlog::logger> _instance;
static std::shared_ptr<spdlog::logger> Instance()
{
std::unique_lock<std::mutex> lck(_mutex, std::defer_lock);
lck.lock();
if (_instance == nullptr)
{
_instance = spdlog::rotating_logger_mt("Logger", "EXO", 1024 * 1024 * 5, 4, true);
}
lck.unlock();
return _instance;
}
我从 spdlog 的创建者那里得到了这个问题的唯一答案。
从 How to shutdown and restart in the same program? 到关机:
void Shutdown()
{
spdlog::drop("Logger");
delete _instance;
}
然后你可以再重复上面的创建过程
我正在使用 spdlog 运行 记录 Visual Studio 中的托管和非托管代码。出于这个原因,我编写了 shell classes 在后台使用 spdlog。
但是,我 运行 我的单元测试遇到了问题。我的单元测试 运行 在单个可执行文件中,因此我需要多次停止并重新启动 spdlog 记录器和日志文件。
我该怎么做?我在 class 中使用此代码来当前在 Windows DLL:
中启动 spdlog 实例private:
API static std::mutex _mutex;
API static std::shared_ptr<spdlog::logger> _instance;
static std::shared_ptr<spdlog::logger> Instance()
{
std::unique_lock<std::mutex> lck(_mutex, std::defer_lock);
lck.lock();
if (_instance == nullptr)
{
_instance = spdlog::rotating_logger_mt("Logger", "EXO", 1024 * 1024 * 5, 4, true);
}
lck.unlock();
return _instance;
}
我从 spdlog 的创建者那里得到了这个问题的唯一答案。
从 How to shutdown and restart in the same program? 到关机:
void Shutdown()
{
spdlog::drop("Logger");
delete _instance;
}
然后你可以再重复上面的创建过程