Last active
December 17, 2018 21:08
-
-
Save slwu89/5861354bc2681ec65fff0cf88cdec907 to your computer and use it in GitHub Desktop.
flexible logger class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// main.cpp | |
// test2 | |
// a slightly less horrible logging class | |
// | |
// Created by Sean Wu on 12/17/18. | |
// Copyright © 2018 Sean Wu. All rights reserved. | |
// | |
/* ###################################################################### | |
# includes and forward declarations | |
###################################################################### */ | |
/* C++ includes */ | |
#include <fstream> | |
#include <string> | |
#include <iostream> | |
#include <memory> | |
#include <unordered_map> | |
/* ###################################################################### | |
# class declaration | |
###################################################################### */ | |
class logger { | |
public: | |
/* ctor & dtor */ | |
logger() { | |
std::cout << "logger born at " << this << std::endl; | |
} | |
~logger(){ | |
close(); | |
std::cout << "logger dying at " << this << std::endl; | |
} | |
/* delete copy constructor/assignment operator, default move constructor/assignment operator */ | |
logger(const logger&) = delete; | |
logger& operator=(const logger&) = delete; | |
logger(logger&&) = default; | |
logger& operator=(logger&&) = default; | |
/* open & close logging streams */ | |
void open(const std::string& outfile, const std::string& name); | |
void close(); | |
/* return reference to output stream */ | |
std::ofstream& get_out(const std::string& name){return logstreams.at(name);}; | |
private: | |
std::unordered_map<std::string, std::ofstream> logstreams; | |
}; | |
/* open a logging stream */ | |
inline void logger::open(const std::string& outfile, const std::string& name){ | |
logstreams.insert(std::make_pair(name,std::ofstream{outfile})); | |
}; | |
/* close streams */ | |
inline void logger::close(){ | |
for(auto& it : logstreams){ | |
it.second.close(); | |
} | |
}; | |
/* main */ | |
int main(int argc, const char * argv[]) { | |
std::unique_ptr<logger> lptr = std::make_unique<logger>(); | |
lptr->open("/Users/slwu89/Desktop/test.txt","test"); | |
lptr->get_out("test") << "a line! \n"; | |
lptr->open("/Users/slwu89/Desktop/test1.txt","test1"); | |
lptr->get_out("test1") << "yet another line! \n"; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment