1 /* 2 * Copyright (C) 2009 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 _ANDROID_LOG_H 18 #define _ANDROID_LOG_H 19 20 /****************************************************************** 21 * 22 * IMPORTANT NOTICE: 23 * 24 * This file is part of Android's set of stable system headers 25 * exposed by the Android NDK (Native Development Kit) since 26 * platform release 1.5 27 * 28 * Third-party source AND binary code relies on the definitions 29 * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 30 * 31 * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 32 * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 33 * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 34 * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 35 */ 36 37 /* 38 * Support routines to send messages to the Android in-kernel log buffer, 39 * which can later be accessed through the 'logcat' utility. 40 * 41 * Each log message must have 42 * - a priority 43 * - a log tag 44 * - some text 45 * 46 * The tag normally corresponds to the component that emits the log message, 47 * and should be reasonably small. 48 * 49 * Log message text may be truncated to less than an implementation-specific 50 * limit (e.g. 1023 characters max). 51 * 52 * Note that a newline character ("\n") will be appended automatically to your 53 * log message, if not already there. It is not possible to send several 54 * messages and have them appear on a single line in logcat. 55 * 56 * PLEASE USE LOGS WITH MODERATION: 57 * 58 * - Sending log messages eats CPU and slow down your application and the 59 * system. 60 * 61 * - The circular log buffer is pretty small (<64KB), sending many messages 62 * might push off other important log messages from the rest of the system. 63 * 64 * - In release builds, only send log messages to account for exceptional 65 * conditions. 66 * 67 * NOTE: These functions MUST be implemented by /system/lib/liblog.so 68 */ 69 70 #include <stdarg.h> 71 72 #ifdef __cplusplus 73 extern "C" { 74 #endif 75 76 /* 77 * Android log priority values, in ascending priority order. 78 */ 79 typedef enum android_LogPriority { 80 ANDROID_LOG_UNKNOWN = 0, 81 ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ 82 ANDROID_LOG_VERBOSE, 83 ANDROID_LOG_DEBUG, 84 ANDROID_LOG_INFO, 85 ANDROID_LOG_WARN, 86 ANDROID_LOG_ERROR, 87 ANDROID_LOG_FATAL, 88 ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ 89 } android_LogPriority; 90 91 /* 92 * Send a simple string to the log. 93 */ 94 int __android_log_write(int prio, const char* tag, const char* text); 95 96 /* 97 * Send a formatted string to the log, used like printf(fmt,...) 98 */ 99 int __android_log_print(int prio, const char* tag, const char* fmt, ...) 100 #if defined(__GNUC__) 101 #ifdef __USE_MINGW_ANSI_STDIO 102 #if __USE_MINGW_ANSI_STDIO 103 __attribute__((__format__(gnu_printf, 3, 4))) 104 #else 105 __attribute__((__format__(printf, 3, 4))) 106 #endif 107 #else 108 __attribute__((__format__(printf, 3, 4))) 109 #endif 110 #endif 111 ; 112 113 /* 114 * A variant of __android_log_print() that takes a va_list to list 115 * additional parameters. 116 */ 117 int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap) 118 #if defined(__GNUC__) 119 #ifdef __USE_MINGW_ANSI_STDIO 120 #if __USE_MINGW_ANSI_STDIO 121 __attribute__((__format__(gnu_printf, 3, 0))) 122 #else 123 __attribute__((__format__(printf, 3, 0))) 124 #endif 125 #else 126 __attribute__((__format__(printf, 3, 0))) 127 #endif 128 #endif 129 ; 130 131 /* 132 * Log an assertion failure and abort the process to have a chance 133 * to inspect it if a debugger is attached. This uses the FATAL priority. 134 */ 135 void __android_log_assert(const char* cond, const char* tag, const char* fmt, 136 ...) 137 #if defined(__GNUC__) 138 __attribute__((__noreturn__)) 139 #ifdef __USE_MINGW_ANSI_STDIO 140 #if __USE_MINGW_ANSI_STDIO 141 __attribute__((__format__(gnu_printf, 3, 4))) 142 #else 143 __attribute__((__format__(printf, 3, 4))) 144 #endif 145 #else 146 __attribute__((__format__(printf, 3, 4))) 147 #endif 148 #endif 149 ; 150 151 #ifdef __cplusplus 152 } 153 #endif 154 155 #endif /* _ANDROID_LOG_H */ 156