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