1/*
2 *  Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#import <Foundation/Foundation.h>
12
13// Subset of rtc::LoggingSeverity.
14typedef NS_ENUM(NSInteger, RTCLoggingSeverity) {
15  kRTCLoggingSeverityVerbose,
16  kRTCLoggingSeverityInfo,
17  kRTCLoggingSeverityWarning,
18  kRTCLoggingSeverityError,
19};
20
21#if defined(__cplusplus)
22extern "C" void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string);
23extern "C" void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity);
24extern "C" NSString* RTCFileName(const char* filePath);
25#else
26
27// Wrapper for C++ LOG(sev) macros.
28// Logs the log string to the webrtc logstream for the given severity.
29extern void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string);
30
31// Wrapper for rtc::LogMessage::LogToDebug.
32// Sets the minimum severity to be logged to console.
33extern void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity);
34
35// Returns the filename with the path prefix removed.
36extern NSString* RTCFileName(const char* filePath);
37
38#endif
39
40// Some convenience macros.
41
42#define RTCLogString(format, ...)                    \
43  [NSString stringWithFormat:@"(%@:%d %s): " format, \
44      RTCFileName(__FILE__),                         \
45      __LINE__,                                      \
46      __FUNCTION__,                                  \
47      ##__VA_ARGS__]
48
49#define RTCLogFormat(severity, format, ...)                     \
50  do {                                                          \
51    NSString* log_string = RTCLogString(format, ##__VA_ARGS__); \
52    RTCLogEx(severity, log_string);                             \
53  } while (false)
54
55#define RTCLogVerbose(format, ...)                                \
56  RTCLogFormat(kRTCLoggingSeverityVerbose, format, ##__VA_ARGS__) \
57
58#define RTCLogInfo(format, ...)                                   \
59  RTCLogFormat(kRTCLoggingSeverityInfo, format, ##__VA_ARGS__)    \
60
61#define RTCLogWarning(format, ...)                                \
62  RTCLogFormat(kRTCLoggingSeverityWarning, format, ##__VA_ARGS__) \
63
64#define RTCLogError(format, ...)                                  \
65  RTCLogFormat(kRTCLoggingSeverityError, format, ##__VA_ARGS__)   \
66
67#if !defined(NDEBUG)
68#define RTCLogDebug(format, ...) RTCLogInfo(format, ##__VA_ARGS__)
69#else
70#define RTCLogDebug(format, ...) \
71  do {                           \
72  } while (false)
73#endif
74
75#define RTCLog(format, ...) RTCLogInfo(format, ##__VA_ARGS__)
76