X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Flog.cc;h=2e5cc54e180aaeb8009123121f964d4db5fedcab;hb=267e21bfb78593bcb87eb24ce01b88d0859566f7;hp=7459700eacd43b783da9b61673866f8535c929b4;hpb=32fc1ddb0ee004d18c36155ddcf4d9b3998a7061;p=dcpomatic.git diff --git a/src/lib/log.cc b/src/lib/log.cc index 7459700ea..2e5cc54e1 100644 --- a/src/lib/log.cc +++ b/src/lib/log.cc @@ -21,25 +21,44 @@ * @brief A very simple logging class. */ -#include -#include #include "log.h" +#include "cross.h" +#include "config.h" +#include "safe_stringstream.h" +#include +#include + +#include "i18n.h" using namespace std; +int const Log::TYPE_GENERAL = 0x1; +int const Log::TYPE_WARNING = 0x2; +int const Log::TYPE_ERROR = 0x4; +int const Log::TYPE_DEBUG_DECODE = 0x8; +int const Log::TYPE_DEBUG_ENCODE = 0x10; +int const Log::TYPE_TIMING = 0x20; + Log::Log () - : _level (STANDARD) + : _types (0) { + _config_connection = Config::instance()->Changed.connect (boost::bind (&Log::config_changed, this)); + config_changed (); +} +void +Log::config_changed () +{ + set_types (Config::instance()->log_types ()); } /** @param n String to log */ void -Log::log (string m, Level l) +Log::log (string message, int type) { boost::mutex::scoped_lock lm (_mutex); - if (l > _level) { + if ((_types & type) == 0) { return; } @@ -47,60 +66,57 @@ Log::log (string m, Level l) time (&t); string a = ctime (&t); - stringstream s; - s << a.substr (0, a.length() - 1) << ": " << m; + SafeStringStream s; + s << a.substr (0, a.length() - 1) << N_(": "); + + if (type & TYPE_ERROR) { + s << "ERROR: "; + } + + if (type & TYPE_WARNING) { + s << "WARNING: "; + } + + s << message; do_log (s.str ()); } void -Log::microsecond_log (string m, Level l) +Log::microsecond_log (string m, int t) { boost::mutex::scoped_lock lm (_mutex); - if (l > _level) { + if ((_types & t) == 0) { return; } struct timeval tv; gettimeofday (&tv, 0); - stringstream s; - s << tv.tv_sec << ":" << tv.tv_usec << " " << m; + SafeStringStream s; + s << tv.tv_sec << N_(":") << tv.tv_usec << N_(" ") << m; do_log (s.str ()); -} - -void -Log::set_level (Level l) -{ - boost::mutex::scoped_lock lm (_mutex); - _level = l; } void -Log::set_level (string l) +Log::dcp_log (dcp::NoteType type, string m) { - if (l == "verbose") { - set_level (VERBOSE); - return; - } else if (l == "timing") { - set_level (TIMING); - return; + switch (type) { + case dcp::DCP_PROGRESS: + log (m, TYPE_GENERAL); + break; + case dcp::DCP_ERROR: + log (m, TYPE_ERROR); + break; + case dcp::DCP_NOTE: + log (m, TYPE_WARNING); + break; } - - set_level (STANDARD); -} - -/** @param file Filename to write log to */ -FileLog::FileLog (string file) - : _file (file) -{ - } void -FileLog::do_log (string m) +Log::set_types (int t) { - ofstream f (_file.c_str(), fstream::app); - f << m << "\n"; + boost::mutex::scoped_lock lm (_mutex); + _types = t; } -