1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2005-2014 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 /* Too many in the ecosystem assume these are included */ 20*61046927SAndroid Build Coastguard Worker #if !defined(_WIN32) 21*61046927SAndroid Build Coastguard Worker #include <pthread.h> 22*61046927SAndroid Build Coastguard Worker #endif 23*61046927SAndroid Build Coastguard Worker #include <stdint.h> /* uint16_t, int32_t */ 24*61046927SAndroid Build Coastguard Worker #include <stdio.h> 25*61046927SAndroid Build Coastguard Worker #include <time.h> 26*61046927SAndroid Build Coastguard Worker #include <unistd.h> 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker #include <android/log.h> 29*61046927SAndroid Build Coastguard Worker #include <log/log_id.h> 30*61046927SAndroid Build Coastguard Worker #include <log/log_main.h> 31*61046927SAndroid Build Coastguard Worker #include <log/log_radio.h> 32*61046927SAndroid Build Coastguard Worker #include <log/log_safetynet.h> 33*61046927SAndroid Build Coastguard Worker #include <log/log_system.h> 34*61046927SAndroid Build Coastguard Worker #include <log/log_time.h> 35*61046927SAndroid Build Coastguard Worker 36*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 37*61046927SAndroid Build Coastguard Worker extern "C" { 38*61046927SAndroid Build Coastguard Worker #endif 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker /* 41*61046927SAndroid Build Coastguard Worker * LOG_TAG is the local tag used for the following simplified 42*61046927SAndroid Build Coastguard Worker * logging macros. You can change this preprocessor definition 43*61046927SAndroid Build Coastguard Worker * before using the other macros to change the tag. 44*61046927SAndroid Build Coastguard Worker */ 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard Worker #ifndef LOG_TAG 47*61046927SAndroid Build Coastguard Worker #define LOG_TAG NULL 48*61046927SAndroid Build Coastguard Worker #endif 49*61046927SAndroid Build Coastguard Worker 50*61046927SAndroid Build Coastguard Worker /* 51*61046927SAndroid Build Coastguard Worker * Normally we strip the effects of ALOGV (VERBOSE messages), 52*61046927SAndroid Build Coastguard Worker * LOG_FATAL and LOG_FATAL_IF (FATAL assert messages) from the 53*61046927SAndroid Build Coastguard Worker * release builds be defining NDEBUG. You can modify this (for 54*61046927SAndroid Build Coastguard Worker * example with "#define LOG_NDEBUG 0" at the top of your source 55*61046927SAndroid Build Coastguard Worker * file) to change that behavior. 56*61046927SAndroid Build Coastguard Worker */ 57*61046927SAndroid Build Coastguard Worker 58*61046927SAndroid Build Coastguard Worker #ifndef LOG_NDEBUG 59*61046927SAndroid Build Coastguard Worker #ifdef NDEBUG 60*61046927SAndroid Build Coastguard Worker #define LOG_NDEBUG 1 61*61046927SAndroid Build Coastguard Worker #else 62*61046927SAndroid Build Coastguard Worker #define LOG_NDEBUG 0 63*61046927SAndroid Build Coastguard Worker #endif 64*61046927SAndroid Build Coastguard Worker #endif 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker /* 67*61046927SAndroid Build Coastguard Worker * The maximum size of the log entry payload that can be 68*61046927SAndroid Build Coastguard Worker * written to the logger. An attempt to write more than 69*61046927SAndroid Build Coastguard Worker * this amount will result in a truncated log entry. 70*61046927SAndroid Build Coastguard Worker */ 71*61046927SAndroid Build Coastguard Worker #define LOGGER_ENTRY_MAX_PAYLOAD 4068 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker /* 74*61046927SAndroid Build Coastguard Worker * Event logging. 75*61046927SAndroid Build Coastguard Worker */ 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard Worker /* 78*61046927SAndroid Build Coastguard Worker * The following should not be used directly. 79*61046927SAndroid Build Coastguard Worker */ 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard Worker int __android_log_bwrite(int32_t tag, const void* payload, size_t len); 82*61046927SAndroid Build Coastguard Worker int __android_log_btwrite(int32_t tag, char type, const void* payload, 83*61046927SAndroid Build Coastguard Worker size_t len); 84*61046927SAndroid Build Coastguard Worker int __android_log_bswrite(int32_t tag, const char* payload); 85*61046927SAndroid Build Coastguard Worker 86*61046927SAndroid Build Coastguard Worker int __android_log_stats_bwrite(int32_t tag, const void* payload, size_t len); 87*61046927SAndroid Build Coastguard Worker 88*61046927SAndroid Build Coastguard Worker #define android_bWriteLog(tag, payload, len) \ 89*61046927SAndroid Build Coastguard Worker __android_log_bwrite(tag, payload, len) 90*61046927SAndroid Build Coastguard Worker #define android_btWriteLog(tag, type, payload, len) \ 91*61046927SAndroid Build Coastguard Worker __android_log_btwrite(tag, type, payload, len) 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard Worker /* 94*61046927SAndroid Build Coastguard Worker * Event log entry types. 95*61046927SAndroid Build Coastguard Worker */ 96*61046927SAndroid Build Coastguard Worker typedef enum { 97*61046927SAndroid Build Coastguard Worker /* Special markers for android_log_list_element type */ 98*61046927SAndroid Build Coastguard Worker EVENT_TYPE_LIST_STOP = '\n', /* declare end of list */ 99*61046927SAndroid Build Coastguard Worker EVENT_TYPE_UNKNOWN = '?', /* protocol error */ 100*61046927SAndroid Build Coastguard Worker 101*61046927SAndroid Build Coastguard Worker /* must match with declaration in java/android/android/util/EventLog.java */ 102*61046927SAndroid Build Coastguard Worker EVENT_TYPE_INT = 0, /* int32_t */ 103*61046927SAndroid Build Coastguard Worker EVENT_TYPE_LONG = 1, /* int64_t */ 104*61046927SAndroid Build Coastguard Worker EVENT_TYPE_STRING = 2, 105*61046927SAndroid Build Coastguard Worker EVENT_TYPE_LIST = 3, 106*61046927SAndroid Build Coastguard Worker EVENT_TYPE_FLOAT = 4, 107*61046927SAndroid Build Coastguard Worker } AndroidEventLogType; 108*61046927SAndroid Build Coastguard Worker 109*61046927SAndroid Build Coastguard Worker #ifndef LOG_EVENT_INT 110*61046927SAndroid Build Coastguard Worker #define LOG_EVENT_INT(_tag, _value) \ 111*61046927SAndroid Build Coastguard Worker { \ 112*61046927SAndroid Build Coastguard Worker int intBuf = _value; \ 113*61046927SAndroid Build Coastguard Worker (void)android_btWriteLog(_tag, EVENT_TYPE_INT, &intBuf, sizeof(intBuf)); \ 114*61046927SAndroid Build Coastguard Worker } 115*61046927SAndroid Build Coastguard Worker #endif 116*61046927SAndroid Build Coastguard Worker #ifndef LOG_EVENT_LONG 117*61046927SAndroid Build Coastguard Worker #define LOG_EVENT_LONG(_tag, _value) \ 118*61046927SAndroid Build Coastguard Worker { \ 119*61046927SAndroid Build Coastguard Worker long long longBuf = _value; \ 120*61046927SAndroid Build Coastguard Worker (void)android_btWriteLog(_tag, EVENT_TYPE_LONG, &longBuf, sizeof(longBuf)); \ 121*61046927SAndroid Build Coastguard Worker } 122*61046927SAndroid Build Coastguard Worker #endif 123*61046927SAndroid Build Coastguard Worker #ifndef LOG_EVENT_FLOAT 124*61046927SAndroid Build Coastguard Worker #define LOG_EVENT_FLOAT(_tag, _value) \ 125*61046927SAndroid Build Coastguard Worker { \ 126*61046927SAndroid Build Coastguard Worker float floatBuf = _value; \ 127*61046927SAndroid Build Coastguard Worker (void)android_btWriteLog(_tag, EVENT_TYPE_FLOAT, &floatBuf, \ 128*61046927SAndroid Build Coastguard Worker sizeof(floatBuf)); \ 129*61046927SAndroid Build Coastguard Worker } 130*61046927SAndroid Build Coastguard Worker #endif 131*61046927SAndroid Build Coastguard Worker #ifndef LOG_EVENT_STRING 132*61046927SAndroid Build Coastguard Worker #define LOG_EVENT_STRING(_tag, _value) \ 133*61046927SAndroid Build Coastguard Worker (void)__android_log_bswrite(_tag, _value); 134*61046927SAndroid Build Coastguard Worker #endif 135*61046927SAndroid Build Coastguard Worker 136*61046927SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */ 137*61046927SAndroid Build Coastguard Worker 138*61046927SAndroid Build Coastguard Worker /* 139*61046927SAndroid Build Coastguard Worker * Release any logger resources (a new log write will immediately re-acquire) 140*61046927SAndroid Build Coastguard Worker * 141*61046927SAndroid Build Coastguard Worker * This is specifically meant to be used by Zygote to close open file descriptors after fork() 142*61046927SAndroid Build Coastguard Worker * and before specialization. O_CLOEXEC is used on file descriptors, so they will be closed upon 143*61046927SAndroid Build Coastguard Worker * exec() in normal use cases. 144*61046927SAndroid Build Coastguard Worker * 145*61046927SAndroid Build Coastguard Worker * Note that this is not safe to call from a multi-threaded program. 146*61046927SAndroid Build Coastguard Worker */ 147*61046927SAndroid Build Coastguard Worker void __android_log_close(void); 148*61046927SAndroid Build Coastguard Worker 149*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 150*61046927SAndroid Build Coastguard Worker } 151*61046927SAndroid Build Coastguard Worker #endif 152