본문 바로가기
프로그래밍 _공부자료./C++ 공부

c ++ std::sdplog 사용법 한방정리

by 대구부자 2023. 7. 26.
반응형

#include <unordered_map>

class Logger {
public:
    static std::shared_ptr<Logger> instance();

    void log(const std::string& message, const std::string& category);

private:
    Logger(); // private 생성자

    std::unordered_map<std::string, std::shared_ptr<spdlog::logger>> loggers_; // 로그 카테고리별 logger 저장

    // ...
};


Logger::Logger() {
    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log.txt", true);
    spdlog::set_default_logger(std::make_shared<spdlog::logger>("logger", file_sink));
    spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%t] %v");

    // 새로운 로거를 만들어 로그 파일 저장 (이 예시에서는 debug와 error 카테고리로 나누어 저장)
    loggers_["debug"] = std::make_shared<spdlog::logger>("debug", file_sink);
    loggers_["error"] = std::make_shared<spdlog::logger>("error", file_sink);
}


void Logger::log(const std::string& message, const std::string& category) {
    if (loggers_.find(category) != loggers_.end()) {
        loggers_[category]->info(message);
    } else {
        spdlog::info(message);
    }
}
std::shared_ptr<Logger> Logger::instance() {
    static std::shared_ptr<Logger> logger_instance = std::shared_ptr<Logger>(new Logger());
    return logger_instance;
}
int main() {
    logger()->log("Logging from main.", "debug"); // debug 카테고리의 로그 파일에 저장
    logger()->log("Error occurred!", "error");    // error 카테고리의 로그 파일에 저장

    // 프로그램 종료 시 자동으로 로거 인스턴스를 해제 (메모리 관리)
    return 0;
}




반응형

댓글