1 /* 2 * Copyright (C) 2016 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 NVRAM_CORE_LOGGER_H_ 18 #define NVRAM_CORE_LOGGER_H_ 19 20 // Numeric constants for log levels. 21 #define NVRAM_LOG_LEVEL_ERR 1 22 #define NVRAM_LOG_LEVEL_WARN 2 23 #define NVRAM_LOG_LEVEL_INFO 3 24 #define NVRAM_LOG_LEVEL_DEBUG 4 25 26 #if !defined(NVRAM_LOG_LEVEL) 27 // By default, log only warnings and errors. 28 #define NVRAM_LOG_LEVEL NVRAM_LOG_LEVEL_WARN 29 #endif 30 31 #ifdef __ANDROID__ 32 33 #define LOG_TAG "NVRAM" 34 #include <log/log.h> 35 36 // Maps NVRAM log levels to Android log priorities. 37 #define NVRAM_ANDROID_LOG_PRI_ERR ANDROID_LOG_ERROR 38 #define NVRAM_ANDROID_LOG_PRI_WARN ANDROID_LOG_WARN 39 #define NVRAM_ANDROID_LOG_PRI_INFO ANDROID_LOG_INFO 40 #define NVRAM_ANDROID_LOG_PRI_DEBUG ANDROID_LOG_DEBUG 41 42 // Send log output to Android's logging system. 43 #define NVRAM_LOG_EMIT(level, fmt, ...) \ 44 LOG_PRI(NVRAM_ANDROID_LOG_PRI_##level, LOG_TAG, fmt, ##__VA_ARGS__) 45 46 #else // __ANDROID__ 47 48 extern "C" { 49 #include <stdio.h> 50 } 51 52 // By default, send log output to stderr. 53 #define NVRAM_LOG_EMIT(level, fmt, ...) \ 54 fprintf(stderr, "NVRAM: " fmt "\n", ##__VA_ARGS__) 55 56 #endif // !__ANDROID__ 57 58 // NVRAM_LOG is the central log macro. It checks whether the log level is 59 // effective, adds file and line information and calls the platform-specific 60 // NVRAM_LOG_EMIT. 61 #define NVRAM_STR(arg) #arg 62 #define NVRAM_STRINGIFY(arg) NVRAM_STR(arg) 63 #define NVRAM_LOG(level, fmt, ...) \ 64 do { \ 65 if (NVRAM_LOG_LEVEL_##level <= NVRAM_LOG_LEVEL) { \ 66 NVRAM_LOG_EMIT(level, __FILE__ ":" NVRAM_STRINGIFY(__LINE__) ": " fmt, \ 67 ##__VA_ARGS__); \ 68 } \ 69 } while (0) 70 71 // Convenience logging macros. 72 #define NVRAM_LOG_ERR(fmt, ...) NVRAM_LOG(ERR, fmt, ##__VA_ARGS__) 73 #define NVRAM_LOG_WARN(fmt, ...) NVRAM_LOG(WARN, fmt, ##__VA_ARGS__) 74 #define NVRAM_LOG_INFO(fmt, ...) NVRAM_LOG(INFO, fmt, ##__VA_ARGS__) 75 #define NVRAM_LOG_DEBUG(fmt, ...) NVRAM_LOG(DEBUG, fmt, ##__VA_ARGS__) 76 77 #endif // NVRAM_CORE_LOGGER_H_ 78