111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2009 The Android Open Source Project 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License. 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://www.apache.org/licenses/LICENSE-2.0 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS, 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _ANDROID_LOG_H 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _ANDROID_LOG_H 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IMPORTANT NOTICE: 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This file is part of Android's set of stable system headers 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * exposed by the Android NDK (Native Development Kit) since 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * platform release 1.5 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Third-party source AND binary code relies on the definitions 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Support routines to send messages to the Android in-kernel log buffer, 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * which can later be accessed through the 'logcat' utility. 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Each log message must have 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - a priority 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - a log tag 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - some text 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The tag normally corresponds to the component that emits the log message, 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * and should be reasonably small. 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Log message text may be truncated to less than an implementation-specific 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limit (e.g. 1023 characters max). 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Note that a newline character ("\n") will be appended automatically to your 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * log message, if not already there. It is not possible to send several messages 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * and have them appear on a single line in logcat. 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * PLEASE USE LOGS WITH MODERATION: 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - Sending log messages eats CPU and slow down your application and the 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * system. 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - The circular log buffer is pretty small (<64KB), sending many messages 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * might push off other important log messages from the rest of the system. 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - In release builds, only send log messages to account for exceptional 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * conditions. 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * NOTE: These functions MUST be implemented by /system/lib/liblog.so 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stdarg.h> 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C" { 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Android log priority values, in ascending priority order. 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef enum android_LogPriority { 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_UNKNOWN = 0, 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_VERBOSE, 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_DEBUG, 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_INFO, 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_WARN, 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_ERROR, 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_FATAL, 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} android_LogPriority; 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Send a simple string to the log. 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint __android_log_write(int prio, const char *tag, const char *text); 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Send a formatted string to the log, used like printf(fmt,...) 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint __android_log_print(int prio, const char *tag, const char *fmt, ...) 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__GNUC__) 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __attribute__ ((format(printf, 3, 4))) 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ; 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * A variant of __android_log_print() that takes a va_list to list 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * additional parameters. 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint __android_log_vprint(int prio, const char *tag, 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char *fmt, va_list ap); 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Log an assertion failure and SIGTRAP the process to have a chance 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * to inspect it, if a debugger is attached. This uses the FATAL priority. 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid __android_log_assert(const char *cond, const char *tag, 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char *fmt, ...) 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__GNUC__) 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __attribute__ ((noreturn)) 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __attribute__ ((format(printf, 3, 4))) 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ; 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _ANDROID_LOG_H */ 129