1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "debug.h" 6 7#include <stdlib.h> 8#include <iostream> 9#include <string> 10 11namespace relocation_packer { 12 13// Construct a new message logger. Prints if level is less than or equal to 14// the level set with SetVerbose() and predicate is true. 15Logger::Logger(Severity severity, int level, bool predicate) { 16 severity_ = severity; 17 level_ = level; 18 predicate_ = predicate; 19} 20 21// On destruction, flush and print the strings accumulated. Abort if FATAL. 22Logger::~Logger() { 23 if (predicate_) { 24 if (level_ <= max_level_) { 25 std::ostream* log = severity_ == INFO ? info_stream_ : error_stream_; 26 std::string tag; 27 switch (severity_) { 28 case INFO: tag = "INFO"; break; 29 case WARNING: tag = "WARNING"; break; 30 case ERROR: tag = "ERROR"; break; 31 case FATAL: tag = "FATAL"; break; 32 } 33 stream_.flush(); 34 *log << tag << ": " << stream_.str() << std::endl; 35 } 36 if (severity_ == FATAL) 37 abort(); 38 } 39} 40 41// Reset to initial state. 42void Logger::Reset() { 43 max_level_ = -1; 44 info_stream_ = &std::cout; 45 error_stream_ = &std::cerr; 46} 47 48// Verbosity. Not thread-safe. 49int Logger::max_level_ = -1; 50 51// Logging streams. Not thread-safe. 52std::ostream* Logger::info_stream_ = &std::cout; 53std::ostream* Logger::error_stream_ = &std::cerr; 54 55} // namespace relocation_packer 56