log.h revision e2bf2ea4d2846031edfc52b942ad53e5467243f6
14f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 24f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 34f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 44f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 54f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * you may not use this file except in compliance with the License. 64f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * You may obtain a copy of the License at 74f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 84f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 94f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * See the License for the specific language governing permissions and 144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * limitations under the License. 154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// 184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// C/C++ logging functions. See the logging documentation for API details. 194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// 204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// We'd like these to be available from C code (in case we import some from 214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// somewhere), so this has a C interface. 224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// 234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// The output will be correct when the log file is shared between multiple 244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// threads and/or multiple processes so long as the operating system 254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// supports O_APPEND. These calls have mutex-protected data structures 264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// and so are NOT reentrant. Do not use LOG in a signal handler. 274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// 284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef _LIBS_CUTILS_LOG_H 294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define _LIBS_CUTILS_LOG_H 304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <stdio.h> 324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <time.h> 334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <sys/types.h> 34982a815c10cc28707d81c46112fc45b1c10df3beColin Cross#include <unistd.h> 354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifdef HAVE_PTHREADS 364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <pthread.h> 37b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif 38ed8a7d84428ec945c48b6b53dc5a3a18fabaf683Colin Cross#include <stdarg.h> 39ed8a7d84428ec945c48b6b53dc5a3a18fabaf683Colin Cross 404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <cutils/uio.h> 414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#include <cutils/logd.h> 4202863b957cfbfc302d3136ed78c0cba86accacd8Brian Swetland 4302863b957cfbfc302d3136ed78c0cba86accacd8Brian Swetland#ifdef __cplusplus 444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectextern "C" { 450dd7ca6e87abb689700c5e3a816a949b03b1154bColin Cross#endif 460dd7ca6e87abb689700c5e3a816a949b03b1154bColin Cross 474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// --------------------------------------------------------------------- 484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Normally we strip LOGV (VERBOSE messages) from release builds. 514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * You can modify this (for example with "#define LOG_NDEBUG 0" 52b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * at the top of your source file) to change that behavior. 53b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef LOG_NDEBUG 554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifdef NDEBUG 564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOG_NDEBUG 1 574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#else 584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOG_NDEBUG 0 594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 625f5d5c8cef10f28950fa108a8bd86d55f11b7ef4Nick Kralevich/* 634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * This is the local tag used for the following simplified 644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * logging macros. You can change this preprocessor definition 654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * before using the other macros to change the tag. 664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef LOG_TAG 684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOG_TAG NULL 694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// --------------------------------------------------------------------- 724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Simplified macro to send a verbose log message using the current LOG_TAG. 755f5d5c8cef10f28950fa108a8bd86d55f11b7ef4Nick Kralevich */ 764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef LOGV 774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#if LOG_NDEBUG 784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGV(...) ((void)0) 794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#else 804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 824f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 834f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef LOGV_IF 87bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#if LOG_NDEBUG 884f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGV_IF(cond, ...) ((void)0) 894f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#else 904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGV_IF(cond, ...) \ 914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 98bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Simplified macro to send a debug log message using the current LOG_TAG. 99bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 10044b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#ifndef LOGD 1014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 102bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#endif 103bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 104bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGD_IF 105bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#define LOGD_IF(cond, ...) \ 1064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 1074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 1084f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 109bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#endif 110bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 1114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 1124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Simplified macro to send an info log message using the current LOG_TAG. 113bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 114bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGI 115bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#define LOGI(...) ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) 116bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#endif 117bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 118bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGI_IF 1194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGI_IF(cond, ...) \ 1204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 1214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 1224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 1234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 124bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 125bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland/* 126bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Simplified macro to send a warning log message using the current LOG_TAG. 127bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 128bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGW 1294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGW(...) ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) 1304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 1314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 132bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGW_IF 1334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOGW_IF(cond, ...) \ 134bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland ( (CONDITION(cond)) \ 135bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland ? ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 136bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland : (void)0 ) 1374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 138bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 139bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland/* 140bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Simplified macro to send an error log message using the current LOG_TAG. 141bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 142bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#ifndef LOGE 143bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#define LOGE(...) ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) 144bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#endif 1454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef LOGE_IF 147bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#define LOGE_IF(cond, ...) \ 1484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 1494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 150bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland : (void)0 ) 151bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland#endif 152bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 153bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland// --------------------------------------------------------------------- 154bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 155bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland/* 156bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Conditional based on whether the current LOG_TAG is enabled at 157bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * verbose priority. 1584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 1594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef IF_LOGV 1604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#if LOG_NDEBUG 1614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define IF_LOGV() if (false) 1624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#else 1634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define IF_LOGV() IF_LOG(LOG_VERBOSE, LOG_TAG) 16444b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#endif 16544b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#endif 16644b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross 16744b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross/* 16844b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross * Conditional based on whether the current LOG_TAG is enabled at 16944b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross * debug priority. 17044b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross */ 17144b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#ifndef IF_LOGD 17244b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#define IF_LOGD() IF_LOG(LOG_DEBUG, LOG_TAG) 17344b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#endif 17444b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross 17544b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross/* 17644b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross * Conditional based on whether the current LOG_TAG is enabled at 17744b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross * info priority. 17844b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross */ 17944b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#ifndef IF_LOGI 18044b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#define IF_LOGI() IF_LOG(LOG_INFO, LOG_TAG) 1814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 18244b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross 18344b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross/* 18444b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross * Conditional based on whether the current LOG_TAG is enabled at 1854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * warn priority. 18644b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross */ 18744b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#ifndef IF_LOGW 18844b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#define IF_LOGW() IF_LOG(LOG_WARN, LOG_TAG) 18944b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross#endif 1904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 192bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Conditional based on whether the current LOG_TAG is enabled at 193bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * error priority. 194bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 1954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef IF_LOGE 1964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define IF_LOGE() IF_LOG(LOG_ERROR, LOG_TAG) 1974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 1984f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// --------------------------------------------------------------------- 2014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 20217dcc5c57dcffb919f3de65ff7a0134ffa3bd874Colin Cross/* 2036405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly * Simplified macro to send a verbose system log message using the current LOG_TAG. 2046405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly */ 2056405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#ifndef SLOGV 2066405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#if LOG_NDEBUG 2076405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#define SLOGV(...) ((void)0) 2086405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#else 2094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGV(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 2106405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#endif 2116405c6953fa02d41d9f6377f4cdb947604f481c4Nick Pelly#endif 2124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 2141e070846f8908dff15086efa12fbba01ab7eae15Chuck Tuffli 2154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGV_IF 2164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#if LOG_NDEBUG 2174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGV_IF(cond, ...) ((void)0) 2184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#else 2194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGV_IF(cond, ...) \ 2204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 2214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 2224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 2234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 2274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Simplified macro to send a debug system log message using the current LOG_TAG. 2284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 2294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGD 2304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGD(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 2314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGD_IF 2344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGD_IF(cond, ...) \ 2354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 2364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 2374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 2384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 240b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 241b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Simplified macro to send an info system log message using the current LOG_TAG. 2424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 2434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGI 2444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGI(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) 2454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGI_IF 2484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGI_IF(cond, ...) \ 2494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 2504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 2514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 2524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 2554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Simplified macro to send a warning system log message using the current LOG_TAG. 2564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 2574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGW 2584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGW(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) 2594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGW_IF 2624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGW_IF(cond, ...) \ 263b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross ( (CONDITION(cond)) \ 264b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 265b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross : (void)0 ) 266b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif 267b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 268b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 2694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Simplified macro to send an error system log message using the current LOG_TAG. 2704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 2714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGE 2724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGE(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) 2734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 2744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2754f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef SLOGE_IF 2764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define SLOGE_IF(cond, ...) \ 2774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ( (CONDITION(cond)) \ 2784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 2794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project : (void)0 ) 2804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 281b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 282b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 283b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 284b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross// --------------------------------------------------------------------- 285b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 286b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 287b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Log a fatal error. If the given condition fails, this stops program 288b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * execution like a normal assertion, but also generating the given message. 289b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * It is NOT stripped from release builds. Note that the condition test 290b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * is -inverted- from the normal assert() semantics. 291b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 292b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_ALWAYS_FATAL_IF(cond, ...) \ 293b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross ( (CONDITION(cond)) \ 294b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross ? ((void)android_printAssert(#cond, LOG_TAG, __VA_ARGS__)) \ 295b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross : (void)0 ) 296b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 297b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_ALWAYS_FATAL(...) \ 298b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross ( ((void)android_printAssert(NULL, LOG_TAG, __VA_ARGS__)) ) 299b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 300b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 301b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Versions of LOG_ALWAYS_FATAL_IF and LOG_ALWAYS_FATAL that 302b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * are stripped out of release builds. 303b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 304b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#if LOG_NDEBUG 305b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 306b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_FATAL_IF(cond, ...) ((void)0) 307b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_FATAL(...) ((void)0) 308b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 309b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#else 310b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 311b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_FATAL_IF(cond, ...) LOG_ALWAYS_FATAL_IF(cond, __VA_ARGS__) 312b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_FATAL(...) LOG_ALWAYS_FATAL(__VA_ARGS__) 313b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 314b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif 315b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 316b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 317b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Assertion that generates a log message when the assertion fails. 318b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Stripped out of release builds. Uses the current LOG_TAG. 319b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 320b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_ASSERT(cond, ...) LOG_FATAL_IF(!(cond), __VA_ARGS__) 321b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross//#define LOG_ASSERT(cond) LOG_FATAL_IF(!(cond), "Assertion failed: " #cond) 322b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 323b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross// --------------------------------------------------------------------- 324b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 325b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 326b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Basic log message macro. 327b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * 328b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Example: 329b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * LOG(LOG_WARN, NULL, "Failed with error %d", errno); 330b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * 331b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * The second argument may be NULL or "" to indicate the "global" tag. 332b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 333b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#ifndef LOG 334b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG(priority, tag, ...) \ 335b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) 336b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif 337b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 338b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 339b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Log macro that allows you to specify a number for the priority. 340b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 341b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#ifndef LOG_PRI 342b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#define LOG_PRI(priority, tag, ...) \ 343b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross android_printLog(priority, tag, __VA_ARGS__) 3444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 3454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 34793ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood * Log macro that allows you to pass in a varargs ("args" is a va_list). 3484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 349b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#ifndef LOG_PRI_VA 3504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define LOG_PRI_VA(priority, tag, fmt, args) \ 351b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross android_vprintLog(priority, NULL, tag, fmt, args) 3524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 353bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland 354bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland/* 355bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland * Conditional given a desired logging priority and tag. 356bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland */ 3574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#ifndef IF_LOG 3584f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define IF_LOG(priority, tag) \ 3594f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project if (android_testLog(ANDROID_##priority, tag)) 3604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#endif 3614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project// --------------------------------------------------------------------- 3634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 3654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Event logging. 3664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 3674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 3694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Event log entry types. These must match up with the declarations in 3704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * java/android/android/util/EventLog.java. 37135237d135807af84bf9b0e5b8d7f8633e58db6f5The Android Open Source Project */ 3724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projecttypedef enum { 3734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project EVENT_TYPE_INT = 0, 3744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project EVENT_TYPE_LONG = 1, 375b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross EVENT_TYPE_STRING = 2, 376b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross EVENT_TYPE_LIST = 3, 3774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project} AndroidEventLogType; 3784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 3794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 38093ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood#define LOG_EVENT_INT(_tag, _value) { \ 38193ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood int intBuf = _value; \ 38293ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood (void) android_btWriteLog(_tag, EVENT_TYPE_INT, &intBuf, \ 38393ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood sizeof(intBuf)); \ 38493ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood } 38593ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood#define LOG_EVENT_LONG(_tag, _value) { \ 38693ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood long long longBuf = _value; \ 38793ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood (void) android_btWriteLog(_tag, EVENT_TYPE_LONG, &longBuf, \ 38893ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood sizeof(longBuf)); \ 38993ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood } 39093ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood#define LOG_EVENT_STRING(_tag, _value) \ 39193ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood ((void) 0) /* not implemented -- must combine len with string */ 39293ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood/* TODO: something for LIST */ 39393ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood 39493ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood/* 39593ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood * =========================================================================== 39693ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood * 39793ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood * The stuff in the rest of this file should not be used directly. 39893ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood */ 39993ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood 4004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_printLog(prio, tag, fmt...) \ 4014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project __android_log_print(prio, tag, fmt) 40235237d135807af84bf9b0e5b8d7f8633e58db6f5The Android Open Source Project 4034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_vprintLog(prio, cond, tag, fmt...) \ 4044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project __android_log_vprint(prio, tag, fmt) 40535237d135807af84bf9b0e5b8d7f8633e58db6f5The Android Open Source Project 4064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_printAssert(cond, tag, fmt...) \ 4074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project __android_log_assert(cond, tag, fmt) 408fc0182eb1db0620eb71fb6ca219b15a17dcd912fIliyan Malchev 409fc0182eb1db0620eb71fb6ca219b15a17dcd912fIliyan Malchev#define android_writeLog(prio, tag, text) \ 410fc0182eb1db0620eb71fb6ca219b15a17dcd912fIliyan Malchev __android_log_write(prio, tag, text) 411fc0182eb1db0620eb71fb6ca219b15a17dcd912fIliyan Malchev 4124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_bWriteLog(tag, payload, len) \ 4134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project __android_log_bwrite(tag, payload, len) 41435237d135807af84bf9b0e5b8d7f8633e58db6f5The Android Open Source Project#define android_btWriteLog(tag, type, payload, len) \ 4154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project __android_log_btwrite(tag, type, payload, len) 4164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 4175bb44c8ea2bc513fefc526918980ab3d17494eccXiaopeng Yang// TODO: remove these prototypes and their users 4185bb44c8ea2bc513fefc526918980ab3d17494eccXiaopeng Yang#define android_testLog(prio, tag) (1) 4195bb44c8ea2bc513fefc526918980ab3d17494eccXiaopeng Yang#define android_writevLog(vec,num) do{}while(0) 42035237d135807af84bf9b0e5b8d7f8633e58db6f5The Android Open Source Project#define android_write1Log(str,len) do{}while (0) 4214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_setMinPriority(tag, prio) do{}while(0) 4224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project//#define android_logToCallback(func) do{}while(0) 4234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_logToFile(tag, file) (0) 4244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project#define android_logToFd(tag, fd) (0) 4254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 4264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projecttypedef enum { 4274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LOG_ID_MAIN = 0, 4284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LOG_ID_RADIO = 1, 42993ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood LOG_ID_EVENTS = 2, 43093ac1559b8c7ad3125ddcd896082b030faadbbd4Mike Lockwood LOG_ID_SYSTEM = 3, 4314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 4324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project LOG_ID_MAX 433bc57d4ce925a62f14c28c55e0ff28af1114f12beBrian Swetland} log_id_t; 434b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 435b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross/* 436b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross * Send a simple string to the log. 437b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross */ 4384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectint __android_log_buf_write(int bufID, int prio, const char *tag, const char *text); 4394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectint __android_log_buf_print(int bufID, int prio, const char *tag, const char *fmt, ...); 4404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 441b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross 442b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#ifdef __cplusplus 443b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross} 444b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif 4454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 446b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross#endif // _LIBS_CUTILS_LOG_H 447b0ab94b7d5a888f0b6920b156e5c6a075fa0741aColin Cross