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