summaryrefslogtreecommitdiffstats
path: root/mojo/environment/default_logger_impl.cc
blob: 9a321006cfe0ff97a370ad9cfe9f3e942b4f7952 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// 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 "base/logging.h"
#include "base/macros.h"

namespace mojo {
namespace internal {
namespace {

// We rely on log levels being the same numerically:
COMPILE_ASSERT(logging::LOG_VERBOSE == MOJO_LOG_LEVEL_VERBOSE,
               verbose_log_level_value_mismatch);
COMPILE_ASSERT(logging::LOG_INFO == MOJO_LOG_LEVEL_INFO,
               info_log_level_value_mismatch);
COMPILE_ASSERT(logging::LOG_WARNING == MOJO_LOG_LEVEL_WARNING,
               warning_log_level_value_mismatch);
COMPILE_ASSERT(logging::LOG_ERROR == MOJO_LOG_LEVEL_ERROR,
               error_log_level_value_mismatch);
COMPILE_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<int>(log_level);
}

MojoLogLevel ChromiumToMojoLogLevel(int chromium_log_level) {
  // See the compile asserts above.
  return static_cast<MojoLogLevel>(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