aboutsummaryrefslogtreecommitdiff
path: root/include/cutils/xlog.h
blob: a8089b7f61d428ae6f5904752a3167585a9f450e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#if !defined(_XLOG_H)
#define _XLOG_H

#include <cutils/log.h>
#include <cutils/alelog.h>

#ifdef __cplusplus
extern "C" {
#endif

int xlogf_java_tag_is_on(const char *name, int level);
int xlogf_native_tag_is_on(const char *name, int level);

int xlogf_java_xtag_is_on(const char *name, int level);
int xlogf_native_xtag_is_on(const char *name, int level);

#ifndef XLOG_TAG
#define XLOG_TAG NULL
#endif

#ifndef SXLOGV
#define SXLOGV(...) ((void)SXLOG_PRI(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGD
#define SXLOGD(...) ((void)SXLOG_PRI(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGI
#define SXLOGI(...) ((void)SXLOG_PRI(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGW
#define SXLOGW(...) ((void)SXLOG_PRI(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGE
#define SXLOGE(...) ((void)SXLOG_PRI(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGF
#define SXLOGF(...) ((void)SXLOG_PRI(ANDROID_LOG_FATAL, LOG_TAG, __VA_ARGS__))
#endif
#if LOG_NDEBUG
#define SXLOG_ASSERT(cond, ...)			\
    ( (CONDITION(cond))				\
      ? ((void)SXLOGF(LOG_TAG, __VA_ARGS__))	\
      : (void)0 )
#else
#define SXLOG_ASSERT(cond, ...) ((void)0)
#endif

#define SXLOG_ALWAYS_ASSERT(cond,...)                    \
  ( (CONDITION(cond))					 \
    ? ((void)SXLOGF(LOG_TAG, __VA_ARGS__))		 \
      : (void)0 )

#ifndef XLOGV
#define XLOGV(...) ((void)XLOG_PRI(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGD
#define XLOGD(...) ((void)XLOG_PRI(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGI
#define XLOGI(...) ((void)XLOG_PRI(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGW
#define XLOGW(...) ((void)XLOG_PRI(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGE
#define XLOGE(...) ((void)XLOG_PRI(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGF
#define XLOGF(...) ((void)XLOG_PRI(ANDROID_LOG_FATAL, LOG_TAG, __VA_ARGS__))
#endif

#if LOG_NDEBUG
#define XLOG_ASSERT(cond, ...)                  \
    (!(cond)                                    \
     ? ((void)XLOGF(__VA_ARGS__))		\
     : (void)0)
#else
#define XLOG_ASSERT(cond, ...) ((void)0)
#endif

#define XLOG_ALWAY_ASSERT(cond, ...)                    \
    (!(cond)                                            \
     ? ((void)XLOGF(__VA_ARGS__))			\
     : (void)0)


#ifndef SXLOGV2
#define SXLOGV2(...) ((void)SXLOG_PRI(ANDROID_LOG_VERBOSE, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGD2
#define SXLOGD2(...) ((void)SXLOG_PRI(ANDROID_LOG_DEBUG, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGI2
#define SXLOGI2(...) ((void)SXLOG_PRI(ANDROID_LOG_INFO, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGW2
#define SXLOGW2(...) ((void)SXLOG_PRI(ANDROID_LOG_WARN, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGE2
#define SXLOGE2(...) ((void)SXLOG_PRI(ANDROID_LOG_ERROR, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef SXLOGF2
#define SXLOGF2(...) ((void)SXLOG_PRI(ANDROID_LOG_FATAL, XLOG_TAG, __VA_ARGS__))
#endif

#ifndef XLOGV2
#define XLOGV2(...) ((void)XLOG_PRI(ANDROID_LOG_VERBOSE, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGD2
#define XLOGD2(...) ((void)XLOG_PRI(ANDROID_LOG_DEBUG, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGI2
#define XLOGI2(...) ((void)XLOG_PRI(ANDROID_LOG_INFO, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGW2
#define XLOGW2(...) ((void)XLOG_PRI(ANDROID_LOG_WARN, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGE2
#define XLOGE2(...) ((void)XLOG_PRI(ANDROID_LOG_ERROR, XLOG_TAG, __VA_ARGS__))
#endif
#ifndef XLOGF2
#define XLOGF2(...) ((void)XLOG_PRI(ANDROID_LOG_FATAL, XLOG_TAG, __VA_ARGS__))
#endif

struct xlog_record {
	const char *tag_str;
	const char *fmt_str;
	int prio;
};

#if defined(__cplusplus)
extern "C" {
#endif

int __xlog_buf_printf(int bufid, const struct xlog_record *rec, ...);

#if defined(__cplusplus)
}
#endif

#if !defined(HAVE_ALE_FEATURE)

#define xlog_buf_printf(bufid, prio, tag, fmt, ...)			\
	({								\
		static const struct xlog_record _xlog_rec =		\
			{tag, fmt, prio};				\
		__xlog_buf_printf(bufid, &_xlog_rec, ##__VA_ARGS__);	\
	})

#else

#define xlog_buf_printf(bufid, prio, tag, fmt, ...)			\
  ({									\
      static const struct ale_convert ____xlog_ale_rec____ =		\
          { tag, fmt, __FILE__, prio, 0, "" };				\
      ale_log_output(bufid, prio, &____xlog_ale_rec____,		\
                     ##__VA_ARGS__);                                    \
  })

#endif

#ifdef HAVE_XLOG_FEATURE
#define XLOG_PRI(priority, tag, ...)                            \
    xlog_buf_printf(LOG_ID_MAIN, priority, tag, __VA_ARGS__)

#define SXLOG_PRI(priority, tag, ...)                           \
    xlog_buf_printf(LOG_ID_MAIN, priority, tag, __VA_ARGS__)

#define xlog_printf(priority, tag, ...)                         \
    xlog_buf_printf(LOG_ID_MAIN, priority, tag, __VA_ARGS__)

#define sxlog_printf(priority, tag, ...)                        \
    xlog_buf_printf(LOG_ID_SYSTEM, priority, tag, __VA_ARGS__)
#else   //HAVE_XLOG_FEATURE
#define XLOG_PRI(priority, tag, ...)         ((void)0)
#define SXLOG_PRI(priority, tag, ...)        ((void)0)
#define xlog_printf(priority, tag, ...)      ((void)0)
#define sxlog_printf(priority, tag, ...)     ((void)0)
#endif  //HAVE_XLOG_FEATURE

#ifdef __cplusplus
}
#endif

#endif