// 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 "mojo/environment/default_logger_impl.h" #include #include "base/logging.h" #include "base/macros.h" namespace mojo { namespace internal { namespace { // We rely on log levels being the same numerically: static_assert(logging::LOG_VERBOSE == MOJO_LOG_LEVEL_VERBOSE, "verbose log level value mismatch"); static_assert(logging::LOG_INFO == MOJO_LOG_LEVEL_INFO, "info log level value mismatch"); static_assert(logging::LOG_WARNING == MOJO_LOG_LEVEL_WARNING, "warning log level value mismatch"); static_assert(logging::LOG_ERROR == MOJO_LOG_LEVEL_ERROR, "error log level value mismatch"); static_assert(logging::LOG_FATAL == MOJO_LOG_LEVEL_FATAL, "fatal log level value mismatch"); int MojoToChromiumLogLevel(MojoLogLevel log_level) { // See the compile asserts above. return static_cast(log_level); } MojoLogLevel ChromiumToMojoLogLevel(int chromium_log_level) { // See the compile asserts above. return static_cast(chromium_log_level); } void LogMessage(MojoLogLevel log_level, const char* source_file, uint32_t source_line, const char* message) { int chromium_log_level = MojoToChromiumLogLevel(log_level); int chromium_min_log_level = logging::GetMinLogLevel(); // "Fatal" errors aren't suppressable. DCHECK_LE(chromium_min_log_level, logging::LOG_FATAL); if (chromium_log_level < chromium_min_log_level) return; // TODO(vtl): Possibly, we should try to pull out the file and line number // from |message|. logging::LogMessage(__FILE__, __LINE__, chromium_log_level).stream() << message; } MojoLogLevel GetMinimumLogLevel() { return ChromiumToMojoLogLevel(logging::GetMinLogLevel()); } void SetMinimumLogLevel(MojoLogLevel log_level) { logging::SetMinLogLevel(MojoToChromiumLogLevel(log_level)); } const MojoLogger kDefaultLogger = { LogMessage, GetMinimumLogLevel, SetMinimumLogLevel }; } // namespace const MojoLogger* GetDefaultLoggerImpl() { return &kDefaultLogger; } } // namespace internal } // namespace mojo