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/public/cpp/environment/lib/default_logger.h"
6
7#include <stdio.h>
8#include <stdlib.h>  // For |abort()|.
9
10#include <algorithm>
11
12#include "mojo/public/c/environment/logger.h"
13
14namespace mojo {
15
16namespace {
17
18MojoLogLevel g_minimum_log_level = MOJO_LOG_LEVEL_INFO;
19
20const char* GetLogLevelString(MojoLogLevel log_level) {
21  if (log_level <= MOJO_LOG_LEVEL_VERBOSE-3)
22    return "VERBOSE4+";
23  switch (log_level) {
24    case MOJO_LOG_LEVEL_VERBOSE-2:
25      return "VERBOSE3";
26    case MOJO_LOG_LEVEL_VERBOSE-1:
27      return "VERBOSE2";
28    case MOJO_LOG_LEVEL_VERBOSE:
29      return "VERBOSE1";
30    case MOJO_LOG_LEVEL_INFO:
31      return "INFO";
32    case MOJO_LOG_LEVEL_WARNING:
33      return "WARNING";
34    case MOJO_LOG_LEVEL_ERROR:
35      return "ERROR";
36  }
37  // Consider everything higher to be fatal.
38  return "FATAL";
39}
40
41void LogMessage(MojoLogLevel log_level, const char* message) {
42  if (log_level < g_minimum_log_level)
43    return;
44
45  // TODO(vtl): Add timestamp also?
46  fprintf(stderr, "%s: %s\n", GetLogLevelString(log_level), message);
47  if (log_level >= MOJO_LOG_LEVEL_FATAL)
48    abort();
49}
50
51MojoLogLevel GetMinimumLogLevel() {
52  return g_minimum_log_level;
53}
54
55void SetMinimumLogLevel(MojoLogLevel minimum_log_level) {
56  g_minimum_log_level = std::min(minimum_log_level, MOJO_LOG_LEVEL_FATAL);
57}
58
59}  // namespace
60
61namespace internal {
62
63const MojoLogger kDefaultLogger = {
64  LogMessage,
65  GetMinimumLogLevel,
66  SetMinimumLogLevel
67};
68
69}  // namespace internal
70
71}  // namespace mojo
72