log: style

This commit is contained in:
Danny Robson 2015-07-23 17:37:02 +10:00
parent 5d6586636e
commit ea953ec024
2 changed files with 34 additions and 15 deletions

29
log.cpp
View File

@ -32,6 +32,8 @@ using namespace util;
using std::string; using std::string;
using std::map; using std::map;
///////////////////////////////////////////////////////////////////////////////
void void
check_level (level_t l) check_level (level_t l)
{ {
@ -39,6 +41,7 @@ check_level (level_t l)
CHECK (l >= 0 && l < NUM_LEVELS); CHECK (l >= 0 && l < NUM_LEVELS);
} }
//-----------------------------------------------------------------------------
const string& const string&
level_to_string (level_t l) { level_to_string (level_t l) {
check_level (l); check_level (l);
@ -58,6 +61,7 @@ level_to_string (level_t l) {
} }
///////////////////////////////////////////////////////////////////////////////
static level_t static level_t
string_to_level (string name) { string_to_level (string name) {
static const map <string, level_t> NAME_LEVELS = { static const map <string, level_t> NAME_LEVELS = {
@ -83,6 +87,7 @@ string_to_level (string name) {
} }
//-----------------------------------------------------------------------------
std::ostream& std::ostream&
util::operator<< (std::ostream& os, level_t l) { util::operator<< (std::ostream& os, level_t l) {
os << level_to_string (l); os << level_to_string (l);
@ -90,11 +95,7 @@ util::operator<< (std::ostream& os, level_t l) {
} }
void ///////////////////////////////////////////////////////////////////////////////
util::log (level_t l, const std::string &format)
{ detail::log (l, boost::format (format)); }
static level_t static level_t
log_level (void) { log_level (void) {
const char *env = getenv ("LOG_LEVEL"); const char *env = getenv ("LOG_LEVEL");
@ -109,6 +110,13 @@ log_level (void) {
} }
///////////////////////////////////////////////////////////////////////////////
void
util::log (level_t l, const std::string &format)
{ detail::log (l, boost::format (format)); }
//-----------------------------------------------------------------------------
void void
util::detail::log (level_t level, boost::format &&format) { util::detail::log (level_t level, boost::format &&format) {
static const level_t LOG_LEVEL = log_level (); static const level_t LOG_LEVEL = log_level ();
@ -137,13 +145,16 @@ util::detail::log (level_t level, boost::format &&format) {
} }
scoped_logger::scoped_logger (const level_t _level, ///////////////////////////////////////////////////////////////////////////////
const std::string &_message): scoped_logger::scoped_logger (level_t _level,
std::string &&_message):
m_level (_level), m_level (_level),
m_message (_message) m_message (std::move (_message))
{ ; } { ; }
scoped_logger::~scoped_logger () { //-----------------------------------------------------------------------------
scoped_logger::~scoped_logger ()
{
log (m_level, m_message); log (m_level, m_message);
} }

20
log.hpp
View File

@ -28,6 +28,7 @@
#endif #endif
namespace util { namespace util {
///////////////////////////////////////////////////////////////////////////
// rfc5424 log levels. It is assumed they are contiguous to simplify array // rfc5424 log levels. It is assumed they are contiguous to simplify array
// indexing in logging code. // indexing in logging code.
// //
@ -47,14 +48,19 @@ namespace util {
DEFAULT = INFO DEFAULT = INFO
}; };
//-------------------------------------------------------------------------
std::ostream& std::ostream&
operator<< (std::ostream&, level_t); operator<< (std::ostream&, level_t);
///////////////////////////////////////////////////////////////////////////
void log (level_t, const std::string &format); void log (level_t, const std::string &format);
template <typename ...tail> template <typename ...tail>
void log (level_t, const std::string &format, tail ..._tail); void log (level_t, const std::string &format, tail ..._tail);
//-------------------------------------------------------------------------
#define LOG_EMERGENCY(...) do { util::log(util::EMERGENCY, ##__VA_ARGS__); } while (0) #define LOG_EMERGENCY(...) do { util::log(util::EMERGENCY, ##__VA_ARGS__); } while (0)
#define LOG_ALERT(...) do { util::log(util::ALERT, ##__VA_ARGS__); } while (0) #define LOG_ALERT(...) do { util::log(util::ALERT, ##__VA_ARGS__); } while (0)
#define LOG_CRITICAL(...) do { util::log(util::CRITICAL, ##__VA_ARGS__); } while (0) #define LOG_CRITICAL(...) do { util::log(util::CRITICAL, ##__VA_ARGS__); } while (0)
@ -70,15 +76,17 @@ namespace util {
#endif #endif
///////////////////////////////////////////////////////////////////////////
class scoped_logger : public nocopy { class scoped_logger : public nocopy {
public: public:
scoped_logger (const level_t, const std::string&); scoped_logger (const level_t, std::string&&);
~scoped_logger (); ~scoped_logger ();
protected: protected:
const level_t m_level; level_t m_level;
const std::string &m_message; std::string m_message;
}; };
} }
#include "log.ipp" #include "log.ipp"