// // 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_here { __FILE__, __LINE__, STRING( FUNCTION ) } #define log_message( logger, level, ... ) \ logger.log( level, log_here, __VA_ARGS__ ) namespace logging { class logger_impl; class manager; class logger { public: ~logger(); template inline void log(log_level ll, std::string const & interp, Args && ...args) { log( ll, location_info{}, interp, std::forward(args)... ); } template inline void log(log_level ll, location_info info, std::string const & interp, Args && ...args) { if ( should_log( ll ) ) { log( ll, info, format_msg( interp, std::forward(args)... ) ); } } void flush(); protected: logger(std::string const & name, std::shared_ptr impl); private: friend class manager; bool should_log( log_level ) const; void log( log_level ll, location_info info, std::string const& ); private: log_level min_level_; std::string const logger_name_; std::shared_ptr impl_; }; }