1d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org/*
2d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *
4d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org */
10d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
11d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org#include "webrtc/system_wrappers/interface/logging.h"
12d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
13d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org#include <string.h>
14c6d6fed3c0a82bb7a09095381b974e8e5eebcb35pbos@webrtc.org
15804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org#include <sstream>
16d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
17d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org#include "webrtc/common_types.h"
18d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org#include "webrtc/system_wrappers/interface/trace.h"
19d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
20d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.orgnamespace webrtc {
21804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.orgnamespace {
22d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
23804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.orgTraceLevel WebRtcSeverity(LoggingSeverity sev) {
24d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org  switch (sev) {
2506eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org    // TODO(ajm): SENSITIVE doesn't have a corresponding webrtc level.
26d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org    case LS_SENSITIVE:  return kTraceInfo;
27bc687c51d87cbcc52ff13b29ea96062c593bb90bandrew@webrtc.org    case LS_VERBOSE:    return kTraceInfo;
28bc687c51d87cbcc52ff13b29ea96062c593bb90bandrew@webrtc.org    case LS_INFO:       return kTraceTerseInfo;
29d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org    case LS_WARNING:    return kTraceWarning;
30d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org    case LS_ERROR:      return kTraceError;
31d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org    default:            return kTraceNone;
32d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org  }
33d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org}
34d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
35804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.orgconst char* DescribeFile(const char* file) {
36804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org  const char* end1 = ::strrchr(file, '/');
37804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org  const char* end2 = ::strrchr(file, '\\');
38804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org  if (!end1 && !end2)
39804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org    return file;
40804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org  else
41804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org    return (end1 > end2) ? end1 + 1 : end2 + 1;
42804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org}
43804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org
44804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org}  // namespace
45804d5527f49d09d2b4d2f462532abd78c905bff7andrew@webrtc.org
46d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.orgLogMessage::LogMessage(const char* file, int line, LoggingSeverity sev)
47d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org    : severity_(sev) {
48d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org  print_stream_ << "(" << DescribeFile(file) << ":" << line << "): ";
49d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org}
50d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
5106eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.orgbool LogMessage::Loggable(LoggingSeverity sev) {
5206eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org  // |level_filter| is a bitmask, unlike libjingle's minimum severity value.
5306eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org  return WebRtcSeverity(sev) & Trace::level_filter() ? true : false;
5406eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org}
5506eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org
56d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.orgLogMessage::~LogMessage() {
57d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org  const std::string& str = print_stream_.str();
589705beb71497537569f82b7b0e3a0175c4214ed2andrew@webrtc.org  Trace::Add(WebRtcSeverity(severity_), kTraceUndefined, 0, str.c_str());
59d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org}
60d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org
61d898c019c4e09c73bc7354da9f1b54004f3e4b7eandrew@webrtc.org}  // namespace webrtc
62