15c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 25c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Copyright (C) 2009 The Android Open Source Project 35c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 45c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License"); 55c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * you may not use this file except in compliance with the License. 65c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * You may obtain a copy of the License at 75c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 85c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * http://www.apache.org/licenses/LICENSE-2.0 95c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 105c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Unless required by applicable law or agreed to in writing, software 115c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS, 125c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * See the License for the specific language governing permissions and 145c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * limitations under the License. 155c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 165c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 175c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifndef _ANDROID_LOG_H 185c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#define _ANDROID_LOG_H 195c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 205c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/****************************************************************** 215c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 225c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * IMPORTANT NOTICE: 235c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 245c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * This file is part of Android's set of stable system headers 255c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * exposed by the Android NDK (Native Development Kit) since 265c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * platform release 1.5 275c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 285c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Third-party source AND binary code relies on the definitions 295c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 305c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 315c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 325c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 335c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 345c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 355c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 365c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 375c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 385c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Support routines to send messages to the Android in-kernel log buffer, 395c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * which can later be accessed through the 'logcat' utility. 405c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 415c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Each log message must have 425c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - a priority 435c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - a log tag 445c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - some text 455c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 465c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * The tag normally corresponds to the component that emits the log message, 475c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * and should be reasonably small. 485c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 495c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Log message text may be truncated to less than an implementation-specific 505c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * limit (e.g. 1023 characters max). 515c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 525c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Note that a newline character ("\n") will be appended automatically to your 532ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn * log message, if not already there. It is not possible to send several 542ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn * messages and have them appear on a single line in logcat. 555c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 565c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * PLEASE USE LOGS WITH MODERATION: 575c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 585c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - Sending log messages eats CPU and slow down your application and the 595c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * system. 605c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 615c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - The circular log buffer is pretty small (<64KB), sending many messages 625c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * might push off other important log messages from the rest of the system. 635c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 645c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * - In release builds, only send log messages to account for exceptional 655c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * conditions. 665c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * 675c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * NOTE: These functions MUST be implemented by /system/lib/liblog.so 685c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 695c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 705c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#include <stdarg.h> 715c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 725c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifdef __cplusplus 735c967da341c9395a4c378c149f326505224ec66eMark Salyzynextern "C" { 745c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 755c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 765c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 775c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Android log priority values, in ascending priority order. 785c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 795c967da341c9395a4c378c149f326505224ec66eMark Salyzyntypedef enum android_LogPriority { 802ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_UNKNOWN = 0, 812ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ 822ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_VERBOSE, 832ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_DEBUG, 842ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_INFO, 852ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_WARN, 862ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_ERROR, 872ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_FATAL, 882ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ 895c967da341c9395a4c378c149f326505224ec66eMark Salyzyn} android_LogPriority; 905c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 915c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 925c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Send a simple string to the log. 935c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 945c967da341c9395a4c378c149f326505224ec66eMark Salyzynint __android_log_write(int prio, const char* tag, const char* text); 955c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 965c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 975c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Send a formatted string to the log, used like printf(fmt,...) 985c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 992ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzynint __android_log_print(int prio, const char* tag, const char* fmt, ...) 1005c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if defined(__GNUC__) 1015c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifdef __USE_MINGW_ANSI_STDIO 1025c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if __USE_MINGW_ANSI_STDIO 1032ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(gnu_printf, 3, 4))) 1045c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1052ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 4))) 1065c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1075c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1082ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 4))) 1095c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1105c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1115c967da341c9395a4c378c149f326505224ec66eMark Salyzyn ; 1125c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 1135c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 1145c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * A variant of __android_log_print() that takes a va_list to list 1155c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * additional parameters. 1165c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 1172ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzynint __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap) 1185c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if defined(__GNUC__) 1195c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifdef __USE_MINGW_ANSI_STDIO 1205c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if __USE_MINGW_ANSI_STDIO 1212ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(gnu_printf, 3, 0))) 1225c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1232ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 0))) 1245c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1255c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1262ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 0))) 1275c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1285c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1295c967da341c9395a4c378c149f326505224ec66eMark Salyzyn ; 1305c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 1315c967da341c9395a4c378c149f326505224ec66eMark Salyzyn/* 1325c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * Log an assertion failure and abort the process to have a chance 1335c967da341c9395a4c378c149f326505224ec66eMark Salyzyn * to inspect it if a debugger is attached. This uses the FATAL priority. 1345c967da341c9395a4c378c149f326505224ec66eMark Salyzyn */ 1352ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzynvoid __android_log_assert(const char* cond, const char* tag, const char* fmt, 1362ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ...) 1375c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if defined(__GNUC__) 1382ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__noreturn__)) 1395c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifdef __USE_MINGW_ANSI_STDIO 1405c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#if __USE_MINGW_ANSI_STDIO 1412ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(gnu_printf, 3, 4))) 1425c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1432ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 4))) 1445c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1455c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#else 1462ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn __attribute__((__format__(printf, 3, 4))) 1475c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1485c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1495c967da341c9395a4c378c149f326505224ec66eMark Salyzyn ; 1505c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 1515c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#ifdef __cplusplus 1525c967da341c9395a4c378c149f326505224ec66eMark Salyzyn} 1535c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif 1545c967da341c9395a4c378c149f326505224ec66eMark Salyzyn 1555c967da341c9395a4c378c149f326505224ec66eMark Salyzyn#endif /* _ANDROID_LOG_H */ 156