Home | History | Annotate | Download | only in log
      1 /*
      2  * Copyright (C) 2005-2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef _LIBS_LOG_LOG_SYSTEM_H
     18 #define _LIBS_LOG_LOG_SYSTEM_H
     19 
     20 #include <android/log.h>
     21 #include <log/log_id.h>
     22 
     23 /*
     24  * Normally we strip the effects of ALOGV (VERBOSE messages),
     25  * LOG_FATAL and LOG_FATAL_IF (FATAL assert messages) from the
     26  * release builds be defining NDEBUG.  You can modify this (for
     27  * example with "#define LOG_NDEBUG 0" at the top of your source
     28  * file) to change that behavior.
     29  */
     30 
     31 #ifndef LOG_NDEBUG
     32 #ifdef NDEBUG
     33 #define LOG_NDEBUG 1
     34 #else
     35 #define LOG_NDEBUG 0
     36 #endif
     37 #endif
     38 
     39 #ifndef __predict_false
     40 #define __predict_false(exp) __builtin_expect((exp) != 0, 0)
     41 #endif
     42 
     43 /*
     44  * Simplified macro to send a verbose system log message using current LOG_TAG.
     45  */
     46 #ifndef SLOGV
     47 #define __SLOGV(...)                                                          \
     48   ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, \
     49                                  __VA_ARGS__))
     50 #if LOG_NDEBUG
     51 #define SLOGV(...)          \
     52   do {                      \
     53     if (0) {                \
     54       __SLOGV(__VA_ARGS__); \
     55     }                       \
     56   } while (0)
     57 #else
     58 #define SLOGV(...) __SLOGV(__VA_ARGS__)
     59 #endif
     60 #endif
     61 
     62 #ifndef SLOGV_IF
     63 #if LOG_NDEBUG
     64 #define SLOGV_IF(cond, ...) ((void)0)
     65 #else
     66 #define SLOGV_IF(cond, ...)                                                 \
     67   ((__predict_false(cond))                                                  \
     68        ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, \
     69                                         LOG_TAG, __VA_ARGS__))              \
     70        : (void)0)
     71 #endif
     72 #endif
     73 
     74 /*
     75  * Simplified macro to send a debug system log message using current LOG_TAG.
     76  */
     77 #ifndef SLOGD
     78 #define SLOGD(...)                                                          \
     79   ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, \
     80                                  __VA_ARGS__))
     81 #endif
     82 
     83 #ifndef SLOGD_IF
     84 #define SLOGD_IF(cond, ...)                                               \
     85   ((__predict_false(cond))                                                \
     86        ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, \
     87                                         LOG_TAG, __VA_ARGS__))            \
     88        : (void)0)
     89 #endif
     90 
     91 /*
     92  * Simplified macro to send an info system log message using current LOG_TAG.
     93  */
     94 #ifndef SLOGI
     95 #define SLOGI(...)                                                         \
     96   ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, \
     97                                  __VA_ARGS__))
     98 #endif
     99 
    100 #ifndef SLOGI_IF
    101 #define SLOGI_IF(cond, ...)                                              \
    102   ((__predict_false(cond))                                               \
    103        ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, \
    104                                         LOG_TAG, __VA_ARGS__))           \
    105        : (void)0)
    106 #endif
    107 
    108 /*
    109  * Simplified macro to send a warning system log message using current LOG_TAG.
    110  */
    111 #ifndef SLOGW
    112 #define SLOGW(...)                                                         \
    113   ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, \
    114                                  __VA_ARGS__))
    115 #endif
    116 
    117 #ifndef SLOGW_IF
    118 #define SLOGW_IF(cond, ...)                                              \
    119   ((__predict_false(cond))                                               \
    120        ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, \
    121                                         LOG_TAG, __VA_ARGS__))           \
    122        : (void)0)
    123 #endif
    124 
    125 /*
    126  * Simplified macro to send an error system log message using current LOG_TAG.
    127  */
    128 #ifndef SLOGE
    129 #define SLOGE(...)                                                          \
    130   ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, \
    131                                  __VA_ARGS__))
    132 #endif
    133 
    134 #ifndef SLOGE_IF
    135 #define SLOGE_IF(cond, ...)                                               \
    136   ((__predict_false(cond))                                                \
    137        ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, \
    138                                         LOG_TAG, __VA_ARGS__))            \
    139        : (void)0)
    140 #endif
    141 
    142 #endif /* _LIBS_LOG_LOG_SYSTEM_H */
    143