1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2009 The Android Open Source Project 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*61046927SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*61046927SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*61046927SAndroid Build Coastguard Worker * 8*61046927SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*61046927SAndroid Build Coastguard Worker * 10*61046927SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*61046927SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*61046927SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*61046927SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*61046927SAndroid Build Coastguard Worker * limitations under the License. 15*61046927SAndroid Build Coastguard Worker */ 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker #pragma once 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker /** 20*61046927SAndroid Build Coastguard Worker * @addtogroup Logging 21*61046927SAndroid Build Coastguard Worker * @{ 22*61046927SAndroid Build Coastguard Worker */ 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker /** 25*61046927SAndroid Build Coastguard Worker * \file 26*61046927SAndroid Build Coastguard Worker * 27*61046927SAndroid Build Coastguard Worker * Support routines to send messages to the Android log buffer, 28*61046927SAndroid Build Coastguard Worker * which can later be accessed through the `logcat` utility. 29*61046927SAndroid Build Coastguard Worker * 30*61046927SAndroid Build Coastguard Worker * Each log message must have 31*61046927SAndroid Build Coastguard Worker * - a priority 32*61046927SAndroid Build Coastguard Worker * - a log tag 33*61046927SAndroid Build Coastguard Worker * - some text 34*61046927SAndroid Build Coastguard Worker * 35*61046927SAndroid Build Coastguard Worker * The tag normally corresponds to the component that emits the log message, 36*61046927SAndroid Build Coastguard Worker * and should be reasonably small. 37*61046927SAndroid Build Coastguard Worker * 38*61046927SAndroid Build Coastguard Worker * Log message text may be truncated to less than an implementation-specific 39*61046927SAndroid Build Coastguard Worker * limit (1023 bytes). 40*61046927SAndroid Build Coastguard Worker * 41*61046927SAndroid Build Coastguard Worker * Note that a newline character ("\n") will be appended automatically to your 42*61046927SAndroid Build Coastguard Worker * log message, if not already there. It is not possible to send several 43*61046927SAndroid Build Coastguard Worker * messages and have them appear on a single line in logcat. 44*61046927SAndroid Build Coastguard Worker * 45*61046927SAndroid Build Coastguard Worker * Please use logging in moderation: 46*61046927SAndroid Build Coastguard Worker * 47*61046927SAndroid Build Coastguard Worker * - Sending log messages eats CPU and slow down your application and the 48*61046927SAndroid Build Coastguard Worker * system. 49*61046927SAndroid Build Coastguard Worker * 50*61046927SAndroid Build Coastguard Worker * - The circular log buffer is pretty small, so sending many messages 51*61046927SAndroid Build Coastguard Worker * will hide other important log messages. 52*61046927SAndroid Build Coastguard Worker * 53*61046927SAndroid Build Coastguard Worker * - In release builds, only send log messages to account for exceptional 54*61046927SAndroid Build Coastguard Worker * conditions. 55*61046927SAndroid Build Coastguard Worker */ 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Worker #include <stdarg.h> 58*61046927SAndroid Build Coastguard Worker #include <stddef.h> 59*61046927SAndroid Build Coastguard Worker #include <stdint.h> 60*61046927SAndroid Build Coastguard Worker #include <sys/cdefs.h> 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker #if !defined(__BIONIC__) && !defined(__INTRODUCED_IN) 63*61046927SAndroid Build Coastguard Worker #define __INTRODUCED_IN(x) 64*61046927SAndroid Build Coastguard Worker #endif 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 67*61046927SAndroid Build Coastguard Worker extern "C" { 68*61046927SAndroid Build Coastguard Worker #endif 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker /** 71*61046927SAndroid Build Coastguard Worker * Android log priority values, in increasing order of priority. 72*61046927SAndroid Build Coastguard Worker */ 73*61046927SAndroid Build Coastguard Worker typedef enum android_LogPriority { 74*61046927SAndroid Build Coastguard Worker /** For internal use only. */ 75*61046927SAndroid Build Coastguard Worker ANDROID_LOG_UNKNOWN = 0, 76*61046927SAndroid Build Coastguard Worker /** The default priority, for internal use only. */ 77*61046927SAndroid Build Coastguard Worker ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ 78*61046927SAndroid Build Coastguard Worker /** Verbose logging. Should typically be disabled for a release apk. */ 79*61046927SAndroid Build Coastguard Worker ANDROID_LOG_VERBOSE, 80*61046927SAndroid Build Coastguard Worker /** Debug logging. Should typically be disabled for a release apk. */ 81*61046927SAndroid Build Coastguard Worker ANDROID_LOG_DEBUG, 82*61046927SAndroid Build Coastguard Worker /** Informational logging. Should typically be disabled for a release apk. */ 83*61046927SAndroid Build Coastguard Worker ANDROID_LOG_INFO, 84*61046927SAndroid Build Coastguard Worker /** Warning logging. For use with recoverable failures. */ 85*61046927SAndroid Build Coastguard Worker ANDROID_LOG_WARN, 86*61046927SAndroid Build Coastguard Worker /** Error logging. For use with unrecoverable failures. */ 87*61046927SAndroid Build Coastguard Worker ANDROID_LOG_ERROR, 88*61046927SAndroid Build Coastguard Worker /** Fatal logging. For use when aborting. */ 89*61046927SAndroid Build Coastguard Worker ANDROID_LOG_FATAL, 90*61046927SAndroid Build Coastguard Worker /** For internal use only. */ 91*61046927SAndroid Build Coastguard Worker ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ 92*61046927SAndroid Build Coastguard Worker } android_LogPriority; 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker /** 95*61046927SAndroid Build Coastguard Worker * Writes the constant string `text` to the log, with priority `prio` and tag 96*61046927SAndroid Build Coastguard Worker * `tag`. 97*61046927SAndroid Build Coastguard Worker */ 98*61046927SAndroid Build Coastguard Worker int __android_log_write(int prio, const char* tag, const char* text); 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Worker /** 101*61046927SAndroid Build Coastguard Worker * Writes a formatted string to the log, with priority `prio` and tag `tag`. 102*61046927SAndroid Build Coastguard Worker * The details of formatting are the same as for 103*61046927SAndroid Build Coastguard Worker * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html). 104*61046927SAndroid Build Coastguard Worker */ 105*61046927SAndroid Build Coastguard Worker int __android_log_print(int prio, const char* tag, const char* fmt, ...) 106*61046927SAndroid Build Coastguard Worker __attribute__((__format__(printf, 3, 4))); 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker /** 109*61046927SAndroid Build Coastguard Worker * Equivalent to `__android_log_print`, but taking a `va_list`. 110*61046927SAndroid Build Coastguard Worker * (If `__android_log_print` is like `printf`, this is like `vprintf`.) 111*61046927SAndroid Build Coastguard Worker */ 112*61046927SAndroid Build Coastguard Worker int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap) 113*61046927SAndroid Build Coastguard Worker __attribute__((__format__(printf, 3, 0))); 114*61046927SAndroid Build Coastguard Worker 115*61046927SAndroid Build Coastguard Worker /** 116*61046927SAndroid Build Coastguard Worker * Writes an assertion failure to the log (as `ANDROID_LOG_FATAL`) and to 117*61046927SAndroid Build Coastguard Worker * stderr, before calling 118*61046927SAndroid Build Coastguard Worker * [abort(3)](http://man7.org/linux/man-pages/man3/abort.3.html). 119*61046927SAndroid Build Coastguard Worker * 120*61046927SAndroid Build Coastguard Worker * If `fmt` is non-null, `cond` is unused. If `fmt` is null, the string 121*61046927SAndroid Build Coastguard Worker * `Assertion failed: %s` is used with `cond` as the string argument. 122*61046927SAndroid Build Coastguard Worker * If both `fmt` and `cond` are null, a default string is provided. 123*61046927SAndroid Build Coastguard Worker * 124*61046927SAndroid Build Coastguard Worker * Most callers should use 125*61046927SAndroid Build Coastguard Worker * [assert(3)](http://man7.org/linux/man-pages/man3/assert.3.html) from 126*61046927SAndroid Build Coastguard Worker * `<assert.h>` instead, or the `__assert` and `__assert2` functions 127*61046927SAndroid Build Coastguard Worker * provided by bionic if more control is needed. They support automatically 128*61046927SAndroid Build Coastguard Worker * including the source filename and line number more conveniently than this 129*61046927SAndroid Build Coastguard Worker * function. 130*61046927SAndroid Build Coastguard Worker */ 131*61046927SAndroid Build Coastguard Worker void __android_log_assert(const char* cond, const char* tag, const char* fmt, ...) 132*61046927SAndroid Build Coastguard Worker __attribute__((__noreturn__)) __attribute__((__format__(printf, 3, 4))); 133*61046927SAndroid Build Coastguard Worker 134*61046927SAndroid Build Coastguard Worker /** 135*61046927SAndroid Build Coastguard Worker * Identifies a specific log buffer for __android_log_buf_write() 136*61046927SAndroid Build Coastguard Worker * and __android_log_buf_print(). 137*61046927SAndroid Build Coastguard Worker */ 138*61046927SAndroid Build Coastguard Worker typedef enum log_id { 139*61046927SAndroid Build Coastguard Worker LOG_ID_MIN = 0, 140*61046927SAndroid Build Coastguard Worker 141*61046927SAndroid Build Coastguard Worker /** The main log buffer. This is the only log buffer available to apps. */ 142*61046927SAndroid Build Coastguard Worker LOG_ID_MAIN = 0, 143*61046927SAndroid Build Coastguard Worker /** The radio log buffer. */ 144*61046927SAndroid Build Coastguard Worker LOG_ID_RADIO = 1, 145*61046927SAndroid Build Coastguard Worker /** The event log buffer. */ 146*61046927SAndroid Build Coastguard Worker LOG_ID_EVENTS = 2, 147*61046927SAndroid Build Coastguard Worker /** The system log buffer. */ 148*61046927SAndroid Build Coastguard Worker LOG_ID_SYSTEM = 3, 149*61046927SAndroid Build Coastguard Worker /** The crash log buffer. */ 150*61046927SAndroid Build Coastguard Worker LOG_ID_CRASH = 4, 151*61046927SAndroid Build Coastguard Worker /** The statistics log buffer. */ 152*61046927SAndroid Build Coastguard Worker LOG_ID_STATS = 5, 153*61046927SAndroid Build Coastguard Worker /** The security log buffer. */ 154*61046927SAndroid Build Coastguard Worker LOG_ID_SECURITY = 6, 155*61046927SAndroid Build Coastguard Worker /** The kernel log buffer. */ 156*61046927SAndroid Build Coastguard Worker LOG_ID_KERNEL = 7, 157*61046927SAndroid Build Coastguard Worker 158*61046927SAndroid Build Coastguard Worker LOG_ID_MAX, 159*61046927SAndroid Build Coastguard Worker 160*61046927SAndroid Build Coastguard Worker /** Let the logging function choose the best log target. */ 161*61046927SAndroid Build Coastguard Worker LOG_ID_DEFAULT = 0x7FFFFFFF 162*61046927SAndroid Build Coastguard Worker } log_id_t; 163*61046927SAndroid Build Coastguard Worker 164*61046927SAndroid Build Coastguard Worker /** 165*61046927SAndroid Build Coastguard Worker * Writes the constant string `text` to the log buffer `id`, 166*61046927SAndroid Build Coastguard Worker * with priority `prio` and tag `tag`. 167*61046927SAndroid Build Coastguard Worker * 168*61046927SAndroid Build Coastguard Worker * Apps should use __android_log_write() instead. 169*61046927SAndroid Build Coastguard Worker */ 170*61046927SAndroid Build Coastguard Worker int __android_log_buf_write(int bufID, int prio, const char* tag, const char* text); 171*61046927SAndroid Build Coastguard Worker 172*61046927SAndroid Build Coastguard Worker /** 173*61046927SAndroid Build Coastguard Worker * Writes a formatted string to log buffer `id`, 174*61046927SAndroid Build Coastguard Worker * with priority `prio` and tag `tag`. 175*61046927SAndroid Build Coastguard Worker * The details of formatting are the same as for 176*61046927SAndroid Build Coastguard Worker * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html). 177*61046927SAndroid Build Coastguard Worker * 178*61046927SAndroid Build Coastguard Worker * Apps should use __android_log_print() instead. 179*61046927SAndroid Build Coastguard Worker */ 180*61046927SAndroid Build Coastguard Worker int __android_log_buf_print(int bufID, int prio, const char* tag, const char* fmt, ...) 181*61046927SAndroid Build Coastguard Worker __attribute__((__format__(printf, 4, 5))); 182*61046927SAndroid Build Coastguard Worker 183*61046927SAndroid Build Coastguard Worker /** 184*61046927SAndroid Build Coastguard Worker * Logger data struct used for writing log messages to liblog via __android_log_write_logger_data() 185*61046927SAndroid Build Coastguard Worker * and sending log messages to user defined loggers specified in __android_log_set_logger(). 186*61046927SAndroid Build Coastguard Worker */ 187*61046927SAndroid Build Coastguard Worker struct __android_log_message { 188*61046927SAndroid Build Coastguard Worker /** Must be set to sizeof(__android_log_message) and is used for versioning. */ 189*61046927SAndroid Build Coastguard Worker size_t struct_size; 190*61046927SAndroid Build Coastguard Worker 191*61046927SAndroid Build Coastguard Worker /** {@link log_id_t} values. */ 192*61046927SAndroid Build Coastguard Worker int32_t buffer_id; 193*61046927SAndroid Build Coastguard Worker 194*61046927SAndroid Build Coastguard Worker /** {@link android_LogPriority} values. */ 195*61046927SAndroid Build Coastguard Worker int32_t priority; 196*61046927SAndroid Build Coastguard Worker 197*61046927SAndroid Build Coastguard Worker /** The tag for the log message. */ 198*61046927SAndroid Build Coastguard Worker const char* tag; 199*61046927SAndroid Build Coastguard Worker 200*61046927SAndroid Build Coastguard Worker /** Optional file name, may be set to nullptr. */ 201*61046927SAndroid Build Coastguard Worker const char* file; 202*61046927SAndroid Build Coastguard Worker 203*61046927SAndroid Build Coastguard Worker /** Optional line number, ignore if file is nullptr. */ 204*61046927SAndroid Build Coastguard Worker uint32_t line; 205*61046927SAndroid Build Coastguard Worker 206*61046927SAndroid Build Coastguard Worker /** The log message itself. */ 207*61046927SAndroid Build Coastguard Worker const char* message; 208*61046927SAndroid Build Coastguard Worker }; 209*61046927SAndroid Build Coastguard Worker 210*61046927SAndroid Build Coastguard Worker /** 211*61046927SAndroid Build Coastguard Worker * Prototype for the 'logger' function that is called for every log message. 212*61046927SAndroid Build Coastguard Worker */ 213*61046927SAndroid Build Coastguard Worker typedef void (*__android_logger_function)(const struct __android_log_message* log_message); 214*61046927SAndroid Build Coastguard Worker /** 215*61046927SAndroid Build Coastguard Worker * Prototype for the 'abort' function that is called when liblog will abort due to 216*61046927SAndroid Build Coastguard Worker * __android_log_assert() failures. 217*61046927SAndroid Build Coastguard Worker */ 218*61046927SAndroid Build Coastguard Worker typedef void (*__android_aborter_function)(const char* abort_message); 219*61046927SAndroid Build Coastguard Worker 220*61046927SAndroid Build Coastguard Worker /** 221*61046927SAndroid Build Coastguard Worker * Writes the log message specified by log_message. log_message includes additional file name and 222*61046927SAndroid Build Coastguard Worker * line number information that a logger may use. log_message is versioned for backwards 223*61046927SAndroid Build Coastguard Worker * compatibility. 224*61046927SAndroid Build Coastguard Worker * This assumes that loggability has already been checked through __android_log_is_loggable(). 225*61046927SAndroid Build Coastguard Worker * Higher level logging libraries, such as libbase, first check loggability, then format their 226*61046927SAndroid Build Coastguard Worker * buffers, then pass the message to liblog via this function, and therefore we do not want to 227*61046927SAndroid Build Coastguard Worker * duplicate the loggability check here. 228*61046927SAndroid Build Coastguard Worker * 229*61046927SAndroid Build Coastguard Worker * @param log_message the log message itself, see __android_log_message. 230*61046927SAndroid Build Coastguard Worker * 231*61046927SAndroid Build Coastguard Worker * Available since API level 30. 232*61046927SAndroid Build Coastguard Worker */ 233*61046927SAndroid Build Coastguard Worker void __android_log_write_log_message(struct __android_log_message* log_message) __INTRODUCED_IN(30); 234*61046927SAndroid Build Coastguard Worker 235*61046927SAndroid Build Coastguard Worker /** 236*61046927SAndroid Build Coastguard Worker * Sets a user defined logger function. All log messages sent to liblog will be set to the 237*61046927SAndroid Build Coastguard Worker * function pointer specified by logger for processing. It is not expected that log messages are 238*61046927SAndroid Build Coastguard Worker * already terminated with a new line. This function should add new lines if required for line 239*61046927SAndroid Build Coastguard Worker * separation. 240*61046927SAndroid Build Coastguard Worker * 241*61046927SAndroid Build Coastguard Worker * @param logger the new function that will handle log messages. 242*61046927SAndroid Build Coastguard Worker * 243*61046927SAndroid Build Coastguard Worker * Available since API level 30. 244*61046927SAndroid Build Coastguard Worker */ 245*61046927SAndroid Build Coastguard Worker void __android_log_set_logger(__android_logger_function logger) __INTRODUCED_IN(30); 246*61046927SAndroid Build Coastguard Worker 247*61046927SAndroid Build Coastguard Worker /** 248*61046927SAndroid Build Coastguard Worker * Writes the log message to logd. This is an __android_logger_function and can be provided to 249*61046927SAndroid Build Coastguard Worker * __android_log_set_logger(). It is the default logger when running liblog on a device. 250*61046927SAndroid Build Coastguard Worker * 251*61046927SAndroid Build Coastguard Worker * @param log_message the log message to write, see __android_log_message. 252*61046927SAndroid Build Coastguard Worker * 253*61046927SAndroid Build Coastguard Worker * Available since API level 30. 254*61046927SAndroid Build Coastguard Worker */ 255*61046927SAndroid Build Coastguard Worker void __android_log_logd_logger(const struct __android_log_message* log_message) __INTRODUCED_IN(30); 256*61046927SAndroid Build Coastguard Worker 257*61046927SAndroid Build Coastguard Worker /** 258*61046927SAndroid Build Coastguard Worker * Writes the log message to stderr. This is an __android_logger_function and can be provided to 259*61046927SAndroid Build Coastguard Worker * __android_log_set_logger(). It is the default logger when running liblog on host. 260*61046927SAndroid Build Coastguard Worker * 261*61046927SAndroid Build Coastguard Worker * @param log_message the log message to write, see __android_log_message. 262*61046927SAndroid Build Coastguard Worker * 263*61046927SAndroid Build Coastguard Worker * Available since API level 30. 264*61046927SAndroid Build Coastguard Worker */ 265*61046927SAndroid Build Coastguard Worker void __android_log_stderr_logger(const struct __android_log_message* log_message) 266*61046927SAndroid Build Coastguard Worker __INTRODUCED_IN(30); 267*61046927SAndroid Build Coastguard Worker 268*61046927SAndroid Build Coastguard Worker /** 269*61046927SAndroid Build Coastguard Worker * Sets a user defined aborter function that is called for __android_log_assert() failures. This 270*61046927SAndroid Build Coastguard Worker * user defined aborter function is highly recommended to abort and be noreturn, but is not strictly 271*61046927SAndroid Build Coastguard Worker * required to. 272*61046927SAndroid Build Coastguard Worker * 273*61046927SAndroid Build Coastguard Worker * @param aborter the new aborter function, see __android_aborter_function. 274*61046927SAndroid Build Coastguard Worker * 275*61046927SAndroid Build Coastguard Worker * Available since API level 30. 276*61046927SAndroid Build Coastguard Worker */ 277*61046927SAndroid Build Coastguard Worker void __android_log_set_aborter(__android_aborter_function aborter) __INTRODUCED_IN(30); 278*61046927SAndroid Build Coastguard Worker 279*61046927SAndroid Build Coastguard Worker /** 280*61046927SAndroid Build Coastguard Worker * Calls the stored aborter function. This allows for other logging libraries to use the same 281*61046927SAndroid Build Coastguard Worker * aborter function by calling this function in liblog. 282*61046927SAndroid Build Coastguard Worker * 283*61046927SAndroid Build Coastguard Worker * @param abort_message an additional message supplied when aborting, for example this is used to 284*61046927SAndroid Build Coastguard Worker * call android_set_abort_message() in __android_log_default_aborter(). 285*61046927SAndroid Build Coastguard Worker * 286*61046927SAndroid Build Coastguard Worker * Available since API level 30. 287*61046927SAndroid Build Coastguard Worker */ 288*61046927SAndroid Build Coastguard Worker void __android_log_call_aborter(const char* abort_message) __INTRODUCED_IN(30); 289*61046927SAndroid Build Coastguard Worker 290*61046927SAndroid Build Coastguard Worker /** 291*61046927SAndroid Build Coastguard Worker * Sets android_set_abort_message() on device then aborts(). This is the default aborter. 292*61046927SAndroid Build Coastguard Worker * 293*61046927SAndroid Build Coastguard Worker * @param abort_message an additional message supplied when aborting. This functions calls 294*61046927SAndroid Build Coastguard Worker * android_set_abort_message() with its contents. 295*61046927SAndroid Build Coastguard Worker * 296*61046927SAndroid Build Coastguard Worker * Available since API level 30. 297*61046927SAndroid Build Coastguard Worker */ 298*61046927SAndroid Build Coastguard Worker void __android_log_default_aborter(const char* abort_message) __attribute__((noreturn)) 299*61046927SAndroid Build Coastguard Worker __INTRODUCED_IN(30); 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Worker /** 302*61046927SAndroid Build Coastguard Worker * Use the per-tag properties "log.tag.<tagname>" along with the minimum priority from 303*61046927SAndroid Build Coastguard Worker * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will 304*61046927SAndroid Build Coastguard Worker * be printed. A non-zero result indicates yes, zero indicates false. 305*61046927SAndroid Build Coastguard Worker * 306*61046927SAndroid Build Coastguard Worker * If both a priority for a tag and a minimum priority are set by 307*61046927SAndroid Build Coastguard Worker * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the 308*61046927SAndroid Build Coastguard Worker * minimum priority needed to log. If only one is set, then that value is used to determine the 309*61046927SAndroid Build Coastguard Worker * minimum priority needed. If none are set, then default_priority is used. 310*61046927SAndroid Build Coastguard Worker * 311*61046927SAndroid Build Coastguard Worker * @param prio the priority to test, takes android_LogPriority values. 312*61046927SAndroid Build Coastguard Worker * @param tag the tag to test. 313*61046927SAndroid Build Coastguard Worker * @param default_prio the default priority to use if no properties or minimum priority are set. 314*61046927SAndroid Build Coastguard Worker * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not. 315*61046927SAndroid Build Coastguard Worker * 316*61046927SAndroid Build Coastguard Worker * Available since API level 30. 317*61046927SAndroid Build Coastguard Worker */ 318*61046927SAndroid Build Coastguard Worker int __android_log_is_loggable(int prio, const char* tag, int default_prio) __INTRODUCED_IN(30); 319*61046927SAndroid Build Coastguard Worker 320*61046927SAndroid Build Coastguard Worker /** 321*61046927SAndroid Build Coastguard Worker * Use the per-tag properties "log.tag.<tagname>" along with the minimum priority from 322*61046927SAndroid Build Coastguard Worker * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will 323*61046927SAndroid Build Coastguard Worker * be printed. A non-zero result indicates yes, zero indicates false. 324*61046927SAndroid Build Coastguard Worker * 325*61046927SAndroid Build Coastguard Worker * If both a priority for a tag and a minimum priority are set by 326*61046927SAndroid Build Coastguard Worker * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the 327*61046927SAndroid Build Coastguard Worker * minimum priority needed to log. If only one is set, then that value is used to determine the 328*61046927SAndroid Build Coastguard Worker * minimum priority needed. If none are set, then default_priority is used. 329*61046927SAndroid Build Coastguard Worker * 330*61046927SAndroid Build Coastguard Worker * @param prio the priority to test, takes android_LogPriority values. 331*61046927SAndroid Build Coastguard Worker * @param tag the tag to test. 332*61046927SAndroid Build Coastguard Worker * @param len the length of the tag. 333*61046927SAndroid Build Coastguard Worker * @param default_prio the default priority to use if no properties or minimum priority are set. 334*61046927SAndroid Build Coastguard Worker * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not. 335*61046927SAndroid Build Coastguard Worker * 336*61046927SAndroid Build Coastguard Worker * Available since API level 30. 337*61046927SAndroid Build Coastguard Worker */ 338*61046927SAndroid Build Coastguard Worker int __android_log_is_loggable_len(int prio, const char* tag, size_t len, int default_prio) 339*61046927SAndroid Build Coastguard Worker __INTRODUCED_IN(30); 340*61046927SAndroid Build Coastguard Worker 341*61046927SAndroid Build Coastguard Worker /** 342*61046927SAndroid Build Coastguard Worker * Sets the minimum priority that will be logged for this process. 343*61046927SAndroid Build Coastguard Worker * 344*61046927SAndroid Build Coastguard Worker * @param priority the new minimum priority to set, takes android_LogPriority values. 345*61046927SAndroid Build Coastguard Worker * @return the previous set minimum priority as android_LogPriority values, or 346*61046927SAndroid Build Coastguard Worker * ANDROID_LOG_DEFAULT if none was set. 347*61046927SAndroid Build Coastguard Worker * 348*61046927SAndroid Build Coastguard Worker * Available since API level 30. 349*61046927SAndroid Build Coastguard Worker */ 350*61046927SAndroid Build Coastguard Worker int32_t __android_log_set_minimum_priority(int32_t priority) __INTRODUCED_IN(30); 351*61046927SAndroid Build Coastguard Worker 352*61046927SAndroid Build Coastguard Worker /** 353*61046927SAndroid Build Coastguard Worker * Gets the minimum priority that will be logged for this process. If none has been set by a 354*61046927SAndroid Build Coastguard Worker * previous __android_log_set_minimum_priority() call, this returns ANDROID_LOG_DEFAULT. 355*61046927SAndroid Build Coastguard Worker * 356*61046927SAndroid Build Coastguard Worker * @return the current minimum priority as android_LogPriority values, or 357*61046927SAndroid Build Coastguard Worker * ANDROID_LOG_DEFAULT if none is set. 358*61046927SAndroid Build Coastguard Worker * 359*61046927SAndroid Build Coastguard Worker * Available since API level 30. 360*61046927SAndroid Build Coastguard Worker */ 361*61046927SAndroid Build Coastguard Worker int32_t __android_log_get_minimum_priority(void) __INTRODUCED_IN(30); 362*61046927SAndroid Build Coastguard Worker 363*61046927SAndroid Build Coastguard Worker /** 364*61046927SAndroid Build Coastguard Worker * Sets the default tag if no tag is provided when writing a log message. Defaults to 365*61046927SAndroid Build Coastguard Worker * getprogname(). This truncates tag to the maximum log message size, though appropriate tags 366*61046927SAndroid Build Coastguard Worker * should be much smaller. 367*61046927SAndroid Build Coastguard Worker * 368*61046927SAndroid Build Coastguard Worker * @param tag the new log tag. 369*61046927SAndroid Build Coastguard Worker * 370*61046927SAndroid Build Coastguard Worker * Available since API level 30. 371*61046927SAndroid Build Coastguard Worker */ 372*61046927SAndroid Build Coastguard Worker void __android_log_set_default_tag(const char* tag) __INTRODUCED_IN(30); 373*61046927SAndroid Build Coastguard Worker 374*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 375*61046927SAndroid Build Coastguard Worker } 376*61046927SAndroid Build Coastguard Worker #endif 377*61046927SAndroid Build Coastguard Worker 378*61046927SAndroid Build Coastguard Worker /** @} */ 379