log.h revision 7494581689b0fc1d8addd016b1c92d74d01f5ad4
17494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 27494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $License: 37494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall Copyright (C) 2011 InvenSense Corporation, All Rights Reserved. 47494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $ 57494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 67494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 77494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 87494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * This file incorporates work covered by the following copyright and 97494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * permission notice: 107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Copyright (C) 2005 The Android Open Source Project 127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Licensed under the Apache License, Version 2.0 (the "License"); 147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * you may not use this file except in compliance with the License. 157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * You may obtain a copy of the License at 167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * http://www.apache.org/licenses/LICENSE-2.0 187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Unless required by applicable law or agreed to in writing, software 207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * distributed under the License is distributed on an "AS IS" BASIS, 217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * See the License for the specific language governing permissions and 237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * limitations under the License. 247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * C/C++ logging functions. See the logging documentation for API details. 287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * We'd like these to be available from C code (in case we import some from 307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * somewhere), so this has a C interface. 317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The output will be correct when the log file is shared between multiple 337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * threads and/or multiple processes so long as the operating system 347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * supports O_APPEND. These calls have mutex-protected data structures 357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * and so are NOT reentrant. Do not use MPL_LOG in a signal handler. 367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef _LIBS_CUTILS_MPL_LOG_H 387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define _LIBS_CUTILS_MPL_LOG_H 397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <stdarg.h> 417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include "local_log_def.h" 427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef NDK_BUILD 457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include "log_macros.h" 467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <utils/Log.h> /* For the LOG macro */ 487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <linux/kernel.h> 537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus 567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallextern "C" { 577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Normally we strip MPL_LOGV (VERBOSE messages) from release builds. 637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * You can modify this (for example with "#define MPL_LOG_NDEBUG 0" 647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * at the top of your source file) to change that behavior. 657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_NDEBUG 677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef NDEBUG 687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_NDEBUG 1 697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_NDEBUG 0 717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_UNKNOWN MPL_LOG_VERBOSE 767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEFAULT KERN_DEFAULT 777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_VERBOSE KERN_CONT 787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEBUG KERN_NOTICE 797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_INFO KERN_INFO 807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_WARN KERN_WARNING 817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ERROR KERN_ERR 827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_SILENT MPL_LOG_VERBOSE 837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall /* Based off the log priorities in android 867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall /system/core/include/android/log.h */ 877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_UNKNOWN (0) 887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEFAULT (1) 897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_VERBOSE (2) 907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEBUG (3) 917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_INFO (4) 927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_WARN (5) 937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ERROR (6) 947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_SILENT (8) 957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * This is the local tag used for the following simplified 1007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * logging macros. You can change this preprocessor definition 1017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * before using the other macros to change the tag. 1027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_TAG 1047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_TAG 1067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_TAG NULL 1087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 1127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a verbose log message using the current MPL_LOG_TAG. 1157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGV 1177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 1187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef _WIN32 1197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) \ 1207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 1217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 1227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 1237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\ 1247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 1257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 1267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) \ 1287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 1297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 1307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\ 1317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 1327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef CONDITION 1407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define CONDITION(cond) ((cond) != 0) 1417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGV_IF 1447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 1457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV_IF(cond, fmt, ...) \ 1467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { if (0) MPL_LOG(fmt, ##__VA_ARGS__); } while (0) 1477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV_IF(cond, fmt, ...) \ 1497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a debug log message using the current MPL_LOG_TAG. 1577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGD 1597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGD(fmt, ...) MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGD_IF 1637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGD_IF(cond, fmt, ...) \ 1647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send an info log message using the current MPL_LOG_TAG. 1717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGI 1737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI(fmt, ...) pr_info(KERN_INFO MPL_LOG_TAG fmt, ##__VA_ARGS__) 1757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI(fmt, ...) MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGI_IF 1817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI_IF(cond, fmt, ...) \ 1827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a warning log message using the current MPL_LOG_TAG. 1897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGW 1917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW(fmt, ...) printk(KERN_WARNING MPL_LOG_TAG fmt, ##__VA_ARGS__) 1937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW(fmt, ...) MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGW_IF 1997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW_IF(cond, fmt, ...) \ 2007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 2027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send an error log message using the current MPL_LOG_TAG. 2077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGE 2097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 2107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE(fmt, ...) printk(KERN_ERR MPL_LOG_TAG fmt, ##__VA_ARGS__) 2117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE(fmt, ...) MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 2137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGE_IF 2177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE_IF(cond, fmt, ...) \ 2187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 2207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 2247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log a fatal error. If the given condition fails, this stops program 2277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * execution like a normal assertion, but also generating the given message. 2287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * It is NOT stripped from release builds. Note that the condition test 2297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * is -inverted- from the normal assert() semantics. 2307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ...) \ 2327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? ((void)android_printAssert(#cond, MPL_LOG_TAG, \ 2347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall fmt, ##__VA_ARGS__)) \ 2357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ALWAYS_FATAL(fmt, ...) \ 2387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall (((void)android_printAssert(NULL, MPL_LOG_TAG, fmt, ##__VA_ARGS__))) 2397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Versions of MPL_LOG_ALWAYS_FATAL_IF and MPL_LOG_ALWAYS_FATAL that 2427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * are stripped out of release builds. 2437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 2457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL_IF(cond, fmt, ...) \ 2467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 2477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 2487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__); \ 2497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 2507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL(fmt, ...) \ 2517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 2527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 2537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__) \ 2547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 2557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL_IF(cond, fmt, ...) \ 2577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__) 2587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL(fmt, ...) \ 2597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__) 2607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Assertion that generates a log message when the assertion fails. 2647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Stripped out of release builds. Uses the current MPL_LOG_TAG. 2657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ASSERT(cond, fmt, ...) \ 2677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_FATAL_IF(!(cond), fmt, ##__VA_ARGS__) 2687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 2707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Basic log message macro. 2737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 2747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Example: 2757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * MPL_LOG(MPL_LOG_WARN, NULL, "Failed with error %d", errno); 2767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 2777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The second argument may be NULL or "" to indicate the "global" tag. 2787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG 2807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG(priority, tag, fmt, ...) \ 2817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_PRI(priority, tag, fmt, ##__VA_ARGS__) 2827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log macro that allows you to specify a number for the priority. 2867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_PRI 2887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 2897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall LOG(priority, tag, fmt, ##__VA_ARGS__) 2917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#elif defined __KERNEL__ 2927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall pr_debug(MPL_##priority tag fmt, ##__VA_ARGS__) 2947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall _MLPrintLog(MPL_##priority, tag, fmt, ##__VA_ARGS__) 2977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 3017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log macro that allows you to pass in a varargs ("args" is a va_list). 3027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 3037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_PRI_VA 3047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 3057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \ 3067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall android_vprintLog(priority, NULL, tag, fmt, args) 3077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#elif defined __KERNEL__ 3087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* not allowed in the Kernel because there is no dev_dbg that takes a va_list */ 3097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 3107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \ 3117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall _MLPrintVaLog(priority, NULL, tag, fmt, args) 3127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 3167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 3187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * =========================================================================== 3197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 3207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The stuff in the rest of this file should not be used directly. 3217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 3227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef ANDROID 3247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLPrintLog(int priority, const char *tag, const char *fmt, ...); 3257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLPrintVaLog(int priority, const char *tag, const char *fmt, va_list args); 3267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* Final implementation of actual writing to a character device */ 3277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLWriteLog(const char *buf, int buflen); 3287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallstatic inline void __print_result_location(int result, 3317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall const char *file, 3327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall const char *func, int line) 3337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall{ 3347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOGE("%s|%s|%d returning %d\n", file, func, line, result); 3357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall} 3367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef _WIN32 3387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* The pragma removes warning about expression being constant */ 3397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define LOG_RESULT_LOCATION(condition) \ 3407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 3417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __print_result_location((int)(condition), __FILE__, \ 3427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __func__, __LINE__); \ 3437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 3447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 3457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 3467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define LOG_RESULT_LOCATION(condition) \ 3477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 3487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __print_result_location((int)(condition), __FILE__, \ 3497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __func__, __LINE__); \ 3507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 3517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define INV_ERROR_CHECK(r_1329) \ 3557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (r_1329) { \ 3567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall LOG_RESULT_LOCATION(r_1329); \ 3577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall return r_1329; \ 3587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } 3597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus 3617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall} 3627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif /* _LIBS_CUTILS_MPL_LOG_H */ 364