// // logger.hpp // logger // // Created by Sam Jaffe on 9/3/16. // #pragma once // // Logger.hpp // DanmakuRPG // // Created by Sam Jaffe on 7/18/15. // Copyright (c) 2015 Sam Jaffe. All rights reserved. // #pragma once #include #include #include #include #include #include "logger_fwd.h" #include "format.h" #define log_message( logger, lvl, ... ) \ logger.log(level::lvl, log_here, __VA_ARGS__) namespace logging { class logger_impl; class manager; class logger { public: ~logger(); template inline void log(level ll, std::string const & interp, Args && ...args) { log(ll, location_info{}, interp, std::forward(args)...); } template inline void log(level ll, location_info info, std::string const & interp, Args && ...args) { log(ll, info, message(interp, std::forward(args)...)); } void flush(); protected: logger(std::string const & name, std::shared_ptr impl); private: friend class manager; void log(level ll, location_info info, message const&); private: std::string const logger_name_; std::shared_ptr impl_; }; }