1b9056914e2627627ffdd615e078a9b6020ab1cf2philip.liard@gmail.com// Copyright (C) 2011 The Libphonenumber Authors 21ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 31ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License"); 41ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// you may not use this file except in compliance with the License. 51ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// You may obtain a copy of the License at 61ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 71ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0 81ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 91ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software 101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS, 111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// See the License for the specific language governing permissions and 131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// limitations under the License. 141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Author: Philippe Liard 161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 171ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#ifndef I18N_PHONENUMBERS_LOGGER_H_ 181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#define I18N_PHONENUMBERS_LOGGER_H_ 191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 201ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <cstdio> 211ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <string> 221ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 231ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace i18n { 241ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace phonenumbers { 251ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 261ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comusing std::string; 271ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2867b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.comenum { 291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LOG_FATAL = 1, 301ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LOG_ERROR, 311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LOG_WARNING, 321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LOG_INFO, 331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LOG_DEBUG, 341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comenum { 371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com DFATAL = LOG_FATAL, 381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// ERROR seems to be defined on MSVC, therefore don't overwrite it. 391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#ifndef ERROR 401ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com ERROR = LOG_ERROR, 411ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#endif 421ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com WARNING = LOG_WARNING, 431ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Subclass this abstract class to override the way logging is handled in the 461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// library. You can then call the PhoneNumberUtil::SetLogger() method. 471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comclass Logger { 481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com public: 491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com Logger() : level_(LOG_ERROR) {} 501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual ~Logger() {} 511ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Writes the message level to the underlying output stream. 531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual void WriteLevel() {} 541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Writes the provided message to the underlying output stream. 551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual void WriteMessage(const string& msg) = 0; 561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 5767b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // Note that if set_verbosity_level has been used to set the level to a value 5867b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // that is not represented by an enum, the result here will be a log 5967b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // level that is higher than LOG_DEBUG. 6067b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com inline int level() const { 611ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return level_; 621ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 631ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 6467b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com inline void set_level(int level) { 651ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com level_ = level; 661ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 671ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 6867b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // If you want to see verbose logs in addition to other logs, use this method. 6967b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // This will result in all log messages at the levels above being shown, along 7067b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // with calls to VLOG with the verbosity level set to this level or lower. 7167b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // For example, set_verbosity_level(2) will show calls of VLOG(1) and VLOG(2) 7267b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // but not VLOG(3), along with all calls to LOG(). 7367b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com inline void set_verbosity_level(int verbose_logs_level) { 7467b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com set_level(LOG_DEBUG + verbose_logs_level); 7567b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com } 7667b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com 77cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com static inline Logger* set_logger_impl(Logger* logger) { 781ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com impl_ = logger; 79cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com return logger; 801ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 811ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 821ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com static inline Logger* mutable_logger_impl() { 831ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return impl_; 841ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 851ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 861ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com private: 871ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com static Logger* impl_; 8867b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com int level_; 891ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 901ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 911ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Logger that does not log anything. It could be useful to "mute" the 921ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// phonenumber library. 931ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comclass NullLogger : public Logger { 941ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com public: 951ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual ~NullLogger() {} 961ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 971ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual void WriteMessage(const string& /* msg */) {} 981ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 991ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace phonenumbers 1011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace i18n 1021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#endif // I18N_PHONENUMBERS_LOGGER_ADAPTER_H_ 104