blob: 9a321006cfe0ff97a370ad9cfe9f3e942b4f7952 [file] [log] [blame]
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +09001// 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 "mojo/environment/default_logger_impl.h"
6
7#include "base/logging.h"
8#include "base/macros.h"
9
10namespace mojo {
11namespace internal {
12namespace {
13
viettrungluu@chromium.org37e37812014-06-18 01:43:18 +090014// We rely on log levels being the same numerically:
15COMPILE_ASSERT(logging::LOG_VERBOSE == MOJO_LOG_LEVEL_VERBOSE,
16 verbose_log_level_value_mismatch);
17COMPILE_ASSERT(logging::LOG_INFO == MOJO_LOG_LEVEL_INFO,
18 info_log_level_value_mismatch);
19COMPILE_ASSERT(logging::LOG_WARNING == MOJO_LOG_LEVEL_WARNING,
20 warning_log_level_value_mismatch);
21COMPILE_ASSERT(logging::LOG_ERROR == MOJO_LOG_LEVEL_ERROR,
22 error_log_level_value_mismatch);
23COMPILE_ASSERT(logging::LOG_FATAL == MOJO_LOG_LEVEL_FATAL,
24 fatal_log_level_value_mismatch);
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090025
viettrungluu@chromium.org37e37812014-06-18 01:43:18 +090026int MojoToChromiumLogLevel(MojoLogLevel log_level) {
27 // See the compile asserts above.
28 return static_cast<int>(log_level);
29}
30
31MojoLogLevel ChromiumToMojoLogLevel(int chromium_log_level) {
32 // See the compile asserts above.
33 return static_cast<MojoLogLevel>(chromium_log_level);
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090034}
35
rockotd6b3cb62015-05-24 15:18:09 +090036void LogMessage(MojoLogLevel log_level,
37 const char* source_file,
38 uint32_t source_line,
39 const char* message) {
viettrungluu@chromium.org37e37812014-06-18 01:43:18 +090040 int chromium_log_level = MojoToChromiumLogLevel(log_level);
41 int chromium_min_log_level = logging::GetMinLogLevel();
42 // "Fatal" errors aren't suppressable.
43 DCHECK_LE(chromium_min_log_level, logging::LOG_FATAL);
44 if (chromium_log_level < chromium_min_log_level)
45 return;
46
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090047 // TODO(vtl): Possibly, we should try to pull out the file and line number
48 // from |message|.
viettrungluu@chromium.org37e37812014-06-18 01:43:18 +090049 logging::LogMessage(__FILE__, __LINE__, chromium_log_level).stream()
50 << message;
51}
52
53MojoLogLevel GetMinimumLogLevel() {
54 return ChromiumToMojoLogLevel(logging::GetMinLogLevel());
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090055}
56
viettrungluu@chromium.orgd8ea5e42014-06-20 01:29:24 +090057void SetMinimumLogLevel(MojoLogLevel log_level) {
58 logging::SetMinLogLevel(MojoToChromiumLogLevel(log_level));
59}
60
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090061const MojoLogger kDefaultLogger = {
viettrungluu@chromium.org37e37812014-06-18 01:43:18 +090062 LogMessage,
viettrungluu@chromium.orgd8ea5e42014-06-20 01:29:24 +090063 GetMinimumLogLevel,
64 SetMinimumLogLevel
viettrungluu@chromium.orge5e7fa92014-06-14 16:24:33 +090065};
66
67} // namespace
68
69const MojoLogger* GetDefaultLoggerImpl() {
70 return &kDefaultLogger;
71}
72
73} // namespace internal
74} // namespace mojo