// // 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 "message.h" #define log_message( logger, lvl, ... ) \ logger.log(level::lvl, log_here, __VA_ARGS__) namespace logging { enum class level : int; struct location_info; class logger_impl; struct logpacket; class logger { public: ~logger(); template inline void log(level ll, std::string const & interp, Args && ...args) { log(ll, message(interp, std::forward(args)...)); } template inline void log(level ll, location_info const & info, std::string const & interp, Args && ...args) { log(ll, info, message(interp, std::forward(args)...)); } void log(level ll, message const&); void flush(); protected: logger(std::string const & name, std::shared_ptr impl); private: friend class manager; void log(level ll, location_info const & info, message const&); private: std::string const logger_name_; std::shared_ptr impl_; }; }