| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "debug.h" |
| |
| #include <stdlib.h> |
| #include <iostream> |
| #include <string> |
| |
| namespace relocation_packer { |
| |
| // Construct a new message logger. Prints if level is less than or equal to |
| // the level set with SetVerbose() and predicate is true. |
| Logger::Logger(Severity severity, int level, bool predicate) { |
| severity_ = severity; |
| level_ = level; |
| predicate_ = predicate; |
| } |
| |
| // On destruction, flush and print the strings accumulated. Abort if FATAL. |
| Logger::~Logger() { |
| if (predicate_) { |
| if (level_ <= max_level_) { |
| std::ostream* log = severity_ == INFO ? info_stream_ : error_stream_; |
| std::string tag; |
| switch (severity_) { |
| case INFO: tag = "INFO"; break; |
| case WARNING: tag = "WARNING"; break; |
| case ERROR: tag = "ERROR"; break; |
| case FATAL: tag = "FATAL"; break; |
| } |
| stream_.flush(); |
| *log << tag << ": " << stream_.str() << std::endl; |
| } |
| if (severity_ == FATAL) |
| abort(); |
| } |
| } |
| |
| // Reset to initial state. |
| void Logger::Reset() { |
| max_level_ = -1; |
| info_stream_ = &std::cout; |
| error_stream_ = &std::cerr; |
| } |
| |
| // Verbosity. Not thread-safe. |
| int Logger::max_level_ = -1; |
| |
| // Logging streams. Not thread-safe. |
| std::ostream* Logger::info_stream_ = &std::cout; |
| std::ostream* Logger::error_stream_ = &std::cerr; |
| |
| } // namespace relocation_packer |