반응형
#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;
}
반응형
'프로그래밍 _공부자료. > C++ 공부' 카테고리의 다른 글
c++ 4가지 string을 묶어서 관리하고 싶을때(튜플 형식 (vector)구조체 형식) (0) | 2023.10.17 |
---|---|
c++ multimap 같은키값 서로다른 밸류 가지기 (0) | 2023.09.18 |
std::signal 메개변수 뜻 (0) | 2023.07.25 |
c++ static 사용이유 (0) | 2023.07.07 |
c++ string 문자열 자르기 (0) | 2023.02.17 |
댓글