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