diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2013-02-20 14:14:13 +0100 |
---|---|---|
committer | Patrick Ohly <patrick.ohly@intel.com> | 2013-02-26 12:03:45 +0100 |
commit | 882ff26695b0209b29583bd53e7fba935a78ec77 (patch) | |
tree | f29d09f85a085125668ca75da0a2f8b98e720f45 /src/dbus/server/pim/locale-factory-boost.cpp | |
parent | 22a809beae8652fc61f47b4a81b65815c736a509 (diff) |
PIM: capture libphonenumber output
Don't let libphonenumber write to stdout. Instead redirect into
SyncEvolution logging and manage severity level. For example,
previously parsing errors of phone numbers were logged as [ERROR] by
libphonenumber. Now that appears as "phonenumber error: ...".
Diffstat (limited to 'src/dbus/server/pim/locale-factory-boost.cpp')
-rw-r--r-- | src/dbus/server/pim/locale-factory-boost.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/dbus/server/pim/locale-factory-boost.cpp b/src/dbus/server/pim/locale-factory-boost.cpp index c82f67e6..c7d9b684 100644 --- a/src/dbus/server/pim/locale-factory-boost.cpp +++ b/src/dbus/server/pim/locale-factory-boost.cpp @@ -27,6 +27,7 @@ #include <libebook/libebook.h> #include <phonenumbers/phonenumberutil.h> +#include <phonenumbers/logger.h> #include <boost/locale.hpp> #include <boost/lexical_cast.hpp> @@ -352,18 +353,58 @@ private: std::string m_tel; }; +class PhoneNumberLogger : public i18n::phonenumbers::Logger +{ + const char *getPrefix() + { + switch (level()) { + case i18n::phonenumbers::LOG_FATAL: + return "phonenumber fatal"; + break; + case i18n::phonenumbers::LOG_ERROR: + return "phonenumber error"; + break; + case i18n::phonenumbers::LOG_WARNING: + return "phonenumber warning"; + break; + case i18n::phonenumbers::LOG_INFO: + return "phonenumber info"; + break; + case i18n::phonenumbers::LOG_DEBUG: + return "phonenumber debug"; + break; + default: + return "phonenumber ???"; + break; + } + } + +public: + virtual void WriteMessage(const std::string &msg) + { + SE_LOG(level() == i18n::phonenumbers::LOG_FATAL ? SyncEvo::Logger::ERROR : SyncEvo::Logger::DEBUG, + NULL, getPrefix(), "%s", msg.c_str()); + } +}; + class LocaleFactoryBoost : public LocaleFactory { const i18n::phonenumbers::PhoneNumberUtil &m_phoneNumberUtil; std::locale m_locale; std::string m_country; + PhoneNumberLogger m_logger; public: LocaleFactoryBoost() : m_phoneNumberUtil(*i18n::phonenumbers::PhoneNumberUtil::GetInstance()), m_locale(genLocale()), m_country(std::use_facet<boost::locale::info>(m_locale).country()) - {} + { + // Redirect output of libphonenumber and make it a bit quieter + // than it is by default. We map fatal libphonenumber errors + // to ERROR and everything else to DEBUG. + i18n::phonenumbers::PhoneNumberUtil::SetLogger(&m_logger); + } static std::locale genLocale() { |