blob: dfb31d8539a4e9db24a9b182c188eb0fb529824c [file] [log] [blame]
Zeke Chin2d3b7e22015-07-14 12:55:44 -07001/*
2 * libjingle
3 * Copyright 2015 Google Inc.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#import <Foundation/Foundation.h>
29
30// We route all logging through the WebRTC logger. By doing this we will get
31// both app and WebRTC logs in the same place, which we can then route to a
32// file if we need to. A side effect of this is that we get severity for free.
33typedef NS_ENUM(NSInteger, ARDLogSeverity) {
34 kARDLogSeverityVerbose,
35 kARDLogSeverityInfo,
36 kARDLogSeverityWarning,
37 kARDLogSeverityError,
38};
39
40#if defined(__cplusplus)
41extern "C" void ARDLogToWebRTCLogger(ARDLogSeverity severity,
42 NSString *logString);
43extern "C" NSString *ARDFileName(const char *filePath);
44extern "C" void ARDLogInit();
45#else
46// Logs |logString| to the WebRTC logger at the given severity.
47extern void ARDLogToWebRTCLogger(ARDLogSeverity severity, NSString *logString);
48// Returns the filename with the path prefix removed.
49extern NSString *ARDFileName(const char *filePath);
50// Initializes the correct logging levels. This should be called once on app
51// startup.
52extern void ARDLogInit();
53#endif
54
55#define ARDLogString(format, ...) \
56 [NSString stringWithFormat:@"(%@:%d %s): " format, \
57 ARDFileName(__FILE__), \
58 __LINE__, \
59 __FUNCTION__, \
60 ##__VA_ARGS__]
61
62#define ARDLogEx(severity, format, ...) \
63 do { \
64 NSString *logString = ARDLogString(format, ##__VA_ARGS__); \
65 ARDLogToWebRTCLogger(severity, logString); \
66 } while (false)
67
68#define ARDLogVerbose(format, ...) \
69 ARDLogEx(kARDLogSeverityVerbose, format, ##__VA_ARGS__) \
70
71#define ARDLogInfo(format, ...) \
72 ARDLogEx(kARDLogSeverityInfo, format, ##__VA_ARGS__) \
73
74#define ARDLogWarning(format, ...) \
75 ARDLogEx(kARDLogSeverityWarning, format, ##__VA_ARGS__) \
76
77#define ARDLogError(format, ...) \
78 ARDLogEx(kARDLogSeverityError, format, ##__VA_ARGS__) \
79
80#ifdef _DEBUG
81#define ARDLogDebug(format, ...) ARDLogInfo(format, ##__VA_ARGS__)
82#else
83#define ARDLogDebug(format, ...) \
84 do { \
85 } while (false)
86#endif
87
88#define ARDLog(format, ...) ARDLogInfo(format, ##__VA_ARGS__)