56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
// 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
|