Skip to content

Instantly share code, notes, and snippets.

@slwu89
Last active December 17, 2018 21:08
Show Gist options
  • Save slwu89/5861354bc2681ec65fff0cf88cdec907 to your computer and use it in GitHub Desktop.
Save slwu89/5861354bc2681ec65fff0cf88cdec907 to your computer and use it in GitHub Desktop.
flexible logger class
//
// 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