1 /* 2 * Copyright (C) 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 CHRE_UTIL_NANOAPP_LOG_H_ 18 #define CHRE_UTIL_NANOAPP_LOG_H_ 19 20 /** 21 * @file 22 * Logging macros for nanoapps. These macros allow injecting a LOG_TAG and 23 * compiling nanoapps with a minimum logging level (that is different than CHRE 24 * itself). 25 * 26 * The typical format for the LOG_TAG macro is: "[AppName]" 27 */ 28 29 #include <chre/re.h> 30 31 #include "chre/util/log_common.h" 32 #include "chre/util/toolchain.h" 33 34 #ifndef NANOAPP_MINIMUM_LOG_LEVEL 35 #error "NANOAPP_MINIMUM_LOG_LEVEL must be defined" 36 #endif // NANOAPP_MINIMUM_LOG_LEVEL 37 38 /* 39 * Supply a stub implementation of the LOGx macros when the build is 40 * configured with a minimum logging level that is above the requested level. 41 * Otherwise just map into the chreLog function with the appropriate level. 42 */ 43 44 #define CHRE_LOG(level, fmt, ...) \ 45 do { \ 46 CHRE_LOG_PREAMBLE \ 47 chreLog(level, LOG_TAG " " fmt, ##__VA_ARGS__); \ 48 CHRE_LOG_EPILOGUE \ 49 } while (0) 50 51 #if NANOAPP_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_ERROR 52 #define LOGE(fmt, ...) CHRE_LOG(CHRE_LOG_ERROR, fmt, ##__VA_ARGS__) 53 #else 54 #define LOGE(fmt, ...) CHRE_LOG_NULL(fmt, ##__VA_ARGS__) 55 #endif 56 57 #if NANOAPP_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_WARN 58 #define LOGW(fmt, ...) CHRE_LOG(CHRE_LOG_WARN, fmt, ##__VA_ARGS__) 59 #else 60 #define LOGW(fmt, ...) CHRE_LOG_NULL(fmt, ##__VA_ARGS__) 61 #endif 62 63 #if NANOAPP_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_INFO 64 #define LOGI(fmt, ...) CHRE_LOG(CHRE_LOG_INFO, fmt, ##__VA_ARGS__) 65 #else 66 #define LOGI(fmt, ...) CHRE_LOG_NULL(fmt, ##__VA_ARGS__) 67 #endif 68 69 #if NANOAPP_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_DEBUG 70 #define LOGD(fmt, ...) CHRE_LOG(CHRE_LOG_DEBUG, fmt, ##__VA_ARGS__) 71 #else 72 #define LOGD(fmt, ...) CHRE_LOG_NULL(fmt, ##__VA_ARGS__) 73 #endif 74 75 // Apply printf-style compiler warnings to chreLog calls 76 CHRE_PRINTF_ATTR(2, 3) 77 void chreLog(enum chreLogLevel level, const char *formatStr, ...); 78 79 #endif // CHRE_UTIL_NANOAPP_LOG_H_ 80