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/logging.h"
6
7#include "mojo/public/cpp/environment/environment.h"
8
9namespace mojo {
10namespace internal {
11
12namespace {
13
14// Gets a pointer to the filename portion of |s|. Assumes that the filename
15// follows the last slash or backslash in |s|, or is |s| if no slash or
16// backslash is present.
17//
18// E.g., a pointer to "foo.cc" is returned for the following inputs: "foo.cc",
19// "./foo.cc", ".\foo.cc", "/absolute/path/to/foo.cc",
20// "relative/path/to/foo.cc", "C:\absolute\path\to\foo.cc", etc.
21const char* GetFilename(const char* s) {
22  const char* rv = s;
23  while (*s) {
24    if (*s == '/' || *s == '\\')
25      rv = s + 1;
26    s++;
27  }
28  return rv;
29}
30
31}  // namespace
32
33LogMessage::LogMessage(const char* file, int line, MojoLogLevel log_level)
34    : log_level_(log_level) {
35  // Note: Don't include the log level in the message, since that's passed on.
36  stream_ << GetFilename(file) << '(' << line << "): ";
37}
38
39LogMessage::~LogMessage() {
40  Environment::GetDefaultLogger()->LogMessage(log_level_,
41                                              stream_.str().c_str());
42}
43
44}  // namespace internal
45}  // namespace mojo
46