>source

예제 1을 다운로드하여 따랐습니다.

예시 2로 이동(stdout/stderr 로거 객체 생성) 막혔습니다. 실제로는 그대로 실행할 수 있지만 변경하면

spdlog::get("콘솔")에게spdlog::get("err_logger")충돌한다.

이렇게 바꿔야 하나?

#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;
}

나도 시도했다기본 파일 로거예시:

#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 &amp;
ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
int main()
{
    basic_logfile_example();
    return 0;
}

그리고 나는 그것이기본-log.txt파일에 아무것도 없습니다.

  • 답변 # 1

    등록해야 하기 때문에err_logger먼저 로거. 기본값이 없습니다err_logger내가 아는 한.spdlog::get()변수가 아닌 등록된 이름을 기반으로 로거를 반환합니다.

    이런 code가 필요합니다. code는 복잡하고 다음과 같이 모두 필요하지 않을 수도 있습니다.

    #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();
        auto rotating_sink= std::make_shared("mylog.txt", 1024*1024*10, 3);
        std::vector sinks {stdout_sink, rotating_sink};
        auto logger= std::make_shared("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
    }
    

    이 code 뒤에 다음을 사용할 수 있습니다.spdlog::get("err_logger").

    로거 생성 및 등록에 대해 읽을 수 있습니다. 여기.

    제 생각에는spdlog::stderr_color_mt("표준 오류");로거를 이름으로 등록표준 오류그래서spdlog::get("표준 오류")작동할 수 있지만 나 자신을 테스트하지 않았습니다.

    자동 err_logger= spdlog::stderr_color_mt("stderr"); 하다? err_logger 등록이 아닌가요?

    KcFnMi2022-01-11 08:30:48

    @KcFnMi 아니요 err_logger라는 변수에 로거를 반환합니다. err_logger->와 같이 직접 사용할 수 있습니다. 그러나 spdlog::get("err_logger")를 사용하여 가져와야 하는 경우 업데이트된 내 응답을 업데이트한 것처럼 등록해야 합니다.

    Afshin2022-01-11 08:32:42

    @KcFnMi spdlog wiki에서 로거 생성 및 등록에 대한 링크를 내 답변에 추가했습니다.

    Afshin2022-01-11 08:36:31

    이제 나는 예제를 잘못 해석했다고 생각합니다. 분명히 직접 사용해야 할 것 같습니다.

    KcFnMi2022-01-11 08:39:00

    @KcFnMi 답변을 다시 업데이트했습니다. spdlog::get("stderr") 작동할 수 있다고 생각하지만 확실하지 않습니다.

    Afshin2022-01-11 08:40:38
  • 이전 linux : Docker 설치 크롬 특정 버전
  • 다음 Powershell: 존재하지 않을 수 있는 경로를 해결하시겠습니까?