00001 #ifndef LOGGER_H_
00002 #define LOGGER_H_
00003
00004
00005
00006 #ifndef BOOST_LOG_DYN_LINK
00007 #define BOOST_LOG_DYN_LINK
00008 #endif
00009
00010 #include <boost/log/sinks/sync_frontend.hpp>
00011 #include <boost/log/sinks/text_ostream_backend.hpp>
00012 #include <boost/log/sources/record_ostream.hpp>
00013 #include <boost/log/sources/severity_feature.hpp>
00014 #include <boost/log/sources/severity_logger.hpp>
00015 #include <boost/smart_ptr/shared_ptr.hpp>
00016
00017
00042 class Logger {
00043 public:
00045 enum class SeverityLevel : int {
00046 kTrace = 0,
00047 kDebug,
00048 kInfo,
00049 kWarning,
00050 kError
00051 };
00052
00054 struct _TimeStamp {};
00055
00056 using logger_t = boost::log::sources::severity_logger<SeverityLevel>;
00057
00058 ~Logger() noexcept;
00059
00061 static logger_t &Get() {
00062 return GetInstance().logger_;
00063 }
00064
00071 static void SetLevel(SeverityLevel threshold);
00072
00082 static _TimeStamp TimeStamp() {
00083 return {};
00084 };
00085
00086 private:
00087 Logger();
00088 Logger(Logger const &) = delete;
00089 Logger &operator=(Logger const &) = delete;
00090
00092 static Logger &GetInstance() {
00093 static Logger instance;
00094 return instance;
00095 }
00096
00098 logger_t logger_;
00099
00105 boost::shared_ptr<boost::log::sinks::synchronous_sink<
00106 boost::log::sinks::text_ostream_backend>> sink_;
00107 };
00108
00109
00116 #define LOG_TRACE \
00117 BOOST_LOG_SEV(Logger::Get(), Logger::SeverityLevel::kTrace)
00118
00128 #define LOG_DEBUG \
00129 BOOST_LOG_SEV(Logger::Get(), Logger::SeverityLevel::kDebug)
00130
00138 #define LOG_INFO \
00139 BOOST_LOG_SEV(Logger::Get(), Logger::SeverityLevel::kInfo)
00140
00148 #define LOG_WARN \
00149 BOOST_LOG_SEV(Logger::Get(), Logger::SeverityLevel::kWarning)
00150
00158 #define LOG_ERROR \
00159 BOOST_LOG_SEV(Logger::Get(), Logger::SeverityLevel::kError)
00160
00161
00167 boost::log::basic_record_ostream<char> &operator<<(
00168 boost::log::basic_record_ostream<char> &stream, Logger::_TimeStamp (*)());
00169
00170 #endif // LOGGER_H_
00171