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 messages 54 * 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 * Release any logger resources (a new log write will immediately re-acquire) 93 */ 94 void __android_log_close(); 95 96 /* 97 * Send a simple string to the log. 98 */ 99 int __android_log_write(int prio, const char *tag, const char *text); 100 101 /* 102 * Send a formatted string to the log, used like printf(fmt,...) 103 */ 104 int __android_log_print(int prio, const char *tag, const char *fmt, ...) 105 #if defined(__GNUC__) 106 #ifdef __USE_MINGW_ANSI_STDIO 107 #if __USE_MINGW_ANSI_STDIO 108 __attribute__ ((format(gnu_printf, 3, 4))) 109 #else 110 __attribute__ ((format(printf, 3, 4))) 111 #endif 112 #else 113 __attribute__ ((format(printf, 3, 4))) 114 #endif 115 #endif 116 ; 117 118 /* 119 * A variant of __android_log_print() that takes a va_list to list 120 * additional parameters. 121 */ 122 int __android_log_vprint(int prio, const char *tag, 123 const char *fmt, va_list ap); 124 125 /* 126 * Log an assertion failure and abort the process to have a chance 127 * to inspect it if a debugger is attached. This uses the FATAL priority. 128 */ 129 void __android_log_assert(const char *cond, const char *tag, 130 const char *fmt, ...) 131 #if defined(__GNUC__) 132 __attribute__ ((noreturn)) 133 #ifdef __USE_MINGW_ANSI_STDIO 134 #if __USE_MINGW_ANSI_STDIO 135 __attribute__ ((format(gnu_printf, 3, 4))) 136 #else 137 __attribute__ ((format(printf, 3, 4))) 138 #endif 139 #else 140 __attribute__ ((format(printf, 3, 4))) 141 #endif 142 #endif 143 ; 144 145 #ifdef __cplusplus 146 } 147 #endif 148 149 #endif /* _ANDROID_LOG_H */ 150