首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何玩spdlog?

如何玩spdlog?
EN

Stack Overflow用户
提问于 2022-01-11 08:24:28
回答 1查看 1.3K关注 0票数 0

我下载并遵循了示例1。

移到示例2 (Create stdout/stderr logger object)并被卡住了。实际上,我可以按原样运行,但是如果我改变了

spdlog::get("console") to spdlog::get("err_logger"),它崩溃了。

我要这样改变吗?

代码语言:javascript
复制
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"

void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");
    auto err_logger = spdlog::stderr_color_mt("stderr");
    spdlog::get("err_logger")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name)");
}

int main()
{
    stdout_example();
    return 0;
}

我还尝试了Basic file logger示例:

代码语言:javascript
复制
#include <iostream>
#include "spdlog/sinks/basic_file_sink.h"

void basic_logfile_example()
{
    try
    {
        auto logger = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}

int main()
{
    basic_logfile_example();
    return 0;
}

我看到它创建了basic-log.txt文件,但是上面什么都没有。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 08:29:10

因为您需要首先注册err_logger记录器。据我所知,没有默认的err_loggerspdlog::get()根据其注册名称(而不是变量)返回记录器。

你需要这样的密码。代码很复杂,您可能不需要全部代码:

代码语言:javascript
复制
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("err_logger", sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
    spdlog::register_logger(logger); //<-- this line registers logger for spdlog::get
}

在这段代码之后,您可以使用spdlog::get("err_logger")

您可以阅读有关创建和注册记录器这里的内容。

我认为spdlog::stderr_color_mt("stderr");注册了名为stderr的记录器,这样spdlog::get("stderr")就可以工作了,但是还没有对自己进行测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70663669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档