1// 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
14// 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);
25
26int 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);
34}
35
36void LogMessage(MojoLogLevel log_level, const char* message) {
37  int chromium_log_level = MojoToChromiumLogLevel(log_level);
38  int chromium_min_log_level = logging::GetMinLogLevel();
39  // "Fatal" errors aren't suppressable.
40  DCHECK_LE(chromium_min_log_level, logging::LOG_FATAL);
41  if (chromium_log_level < chromium_min_log_level)
42    return;
43
44  // TODO(vtl): Possibly, we should try to pull out the file and line number
45  // from |message|.
46  logging::LogMessage(__FILE__, __LINE__, chromium_log_level).stream()
47      << message;
48}
49
50MojoLogLevel GetMinimumLogLevel() {
51  return ChromiumToMojoLogLevel(logging::GetMinLogLevel());
52}
53
54void SetMinimumLogLevel(MojoLogLevel log_level) {
55  logging::SetMinLogLevel(MojoToChromiumLogLevel(log_level));
56}
57
58const MojoLogger kDefaultLogger = {
59  LogMessage,
60  GetMinimumLogLevel,
61  SetMinimumLogLevel
62};
63
64}  // namespace
65
66const MojoLogger* GetDefaultLoggerImpl() {
67  return &kDefaultLogger;
68}
69
70}  // namespace internal
71}  // namespace mojo
72