• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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