1dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
2dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Copyright (C) 2005-2017 The Android Open Source Project
3dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn *
4dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License");
5dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * you may not use this file except in compliance with the License.
6dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * You may obtain a copy of the License at
7dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn *
8dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn *      http://www.apache.org/licenses/LICENSE-2.0
9dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn *
10dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Unless required by applicable law or agreed to in writing, software
11dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS,
12dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * See the License for the specific language governing permissions and
14dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * limitations under the License.
15dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
16dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
17dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef _LIBS_LOG_LOG_SYSTEM_H
18dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#define _LIBS_LOG_LOG_SYSTEM_H
19dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
20dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#include <android/log.h>
21dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#include <log/log_id.h>
22dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
23dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
24dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Normally we strip the effects of ALOGV (VERBOSE messages),
25dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * LOG_FATAL and LOG_FATAL_IF (FATAL assert messages) from the
26dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * release builds be defining NDEBUG.  You can modify this (for
27dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * example with "#define LOG_NDEBUG 0" at the top of your source
28dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * file) to change that behavior.
29dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
30dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
31dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef LOG_NDEBUG
32dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifdef NDEBUG
33dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#define LOG_NDEBUG 1
34dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#else
35dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#define LOG_NDEBUG 0
36dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
37dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
38dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
3962d0d2d683f5d19cf9d451548bd03c4b4f53c42eMark Salyzyn#ifndef __predict_false
4062d0d2d683f5d19cf9d451548bd03c4b4f53c42eMark Salyzyn#define __predict_false(exp) __builtin_expect((exp) != 0, 0)
4162d0d2d683f5d19cf9d451548bd03c4b4f53c42eMark Salyzyn#endif
4262d0d2d683f5d19cf9d451548bd03c4b4f53c42eMark Salyzyn
43dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
44dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Simplified macro to send a verbose system log message using current LOG_TAG.
45dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
46dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGV
472ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define __SLOGV(...)                                                          \
482ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, \
492ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 __VA_ARGS__))
50dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#if LOG_NDEBUG
512ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGV(...)          \
522ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  do {                      \
532ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn    if (0) {                \
542ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn      __SLOGV(__VA_ARGS__); \
552ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn    }                       \
562ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  } while (0)
57dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#else
58dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#define SLOGV(...) __SLOGV(__VA_ARGS__)
59dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
60dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
61dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
62dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGV_IF
63dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#if LOG_NDEBUG
642ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGV_IF(cond, ...) ((void)0)
65dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#else
662ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGV_IF(cond, ...)                                                 \
672ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((__predict_false(cond))                                                  \
682ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, \
692ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                        LOG_TAG, __VA_ARGS__))              \
702ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       : (void)0)
71dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
72dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
73dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
74dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
75dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Simplified macro to send a debug system log message using current LOG_TAG.
76dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
77dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGD
782ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGD(...)                                                          \
792ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, \
802ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 __VA_ARGS__))
81dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
82dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
83dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGD_IF
842ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGD_IF(cond, ...)                                               \
852ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((__predict_false(cond))                                                \
862ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, \
872ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                        LOG_TAG, __VA_ARGS__))            \
882ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       : (void)0)
89dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
90dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
91dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
92dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Simplified macro to send an info system log message using current LOG_TAG.
93dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
94dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGI
952ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGI(...)                                                         \
962ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, \
972ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 __VA_ARGS__))
98dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
99dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
100dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGI_IF
1012ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGI_IF(cond, ...)                                              \
1022ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((__predict_false(cond))                                               \
1032ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, \
1042ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                        LOG_TAG, __VA_ARGS__))           \
1052ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       : (void)0)
106dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
107dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
108dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
109dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Simplified macro to send a warning system log message using current LOG_TAG.
110dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
111dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGW
1122ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGW(...)                                                         \
1132ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, \
1142ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 __VA_ARGS__))
115dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
116dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
117dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGW_IF
1182ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGW_IF(cond, ...)                                              \
1192ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((__predict_false(cond))                                               \
1202ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, \
1212ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                        LOG_TAG, __VA_ARGS__))           \
1222ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       : (void)0)
123dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
124dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
125dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn/*
126dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn * Simplified macro to send an error system log message using current LOG_TAG.
127dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn */
128dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGE
1292ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGE(...)                                                          \
1302ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, \
1312ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 __VA_ARGS__))
132dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
133dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
134dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#ifndef SLOGE_IF
1352ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define SLOGE_IF(cond, ...)                                               \
1362ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  ((__predict_false(cond))                                                \
1372ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, \
1382ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                        LOG_TAG, __VA_ARGS__))            \
1392ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       : (void)0)
140dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif
141dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn
142dd61659e73e71d025979ba0001be0a81ea0e9711Mark Salyzyn#endif /* _LIBS_LOG_LOG_SYSTEM_H */
143