1*598139dcSAndroid Build Coastguard Worker# liblog -> logd 2*598139dcSAndroid Build Coastguard Worker 3*598139dcSAndroid Build Coastguard WorkerThe data that liblog sends to logd is represented below. 4*598139dcSAndroid Build Coastguard Worker 5*598139dcSAndroid Build Coastguard Worker struct { 6*598139dcSAndroid Build Coastguard Worker android_log_header_t header; 7*598139dcSAndroid Build Coastguard Worker union { 8*598139dcSAndroid Build Coastguard Worker struct { 9*598139dcSAndroid Build Coastguard Worker char prio; 10*598139dcSAndroid Build Coastguard Worker char tag[...]; 11*598139dcSAndroid Build Coastguard Worker char message[...]; 12*598139dcSAndroid Build Coastguard Worker } string; 13*598139dcSAndroid Build Coastguard Worker struct { 14*598139dcSAndroid Build Coastguard Worker android_event_header_t event_header; 15*598139dcSAndroid Build Coastguard Worker android_event_*_t payload[...]; 16*598139dcSAndroid Build Coastguard Worker } binary; 17*598139dcSAndroid Build Coastguard Worker }; 18*598139dcSAndroid Build Coastguard Worker }; 19*598139dcSAndroid Build Coastguard Worker 20*598139dcSAndroid Build Coastguard Workerwhere the embedded structs are defined as: 21*598139dcSAndroid Build Coastguard Worker 22*598139dcSAndroid Build Coastguard Worker struct android_log_header_t { 23*598139dcSAndroid Build Coastguard Worker uint8_t id; 24*598139dcSAndroid Build Coastguard Worker uint16_t tid; 25*598139dcSAndroid Build Coastguard Worker log_time realtime; 26*598139dcSAndroid Build Coastguard Worker }; 27*598139dcSAndroid Build Coastguard Worker 28*598139dcSAndroid Build Coastguard Worker struct log_time { 29*598139dcSAndroid Build Coastguard Worker uint32_t tv_sec = 0; 30*598139dcSAndroid Build Coastguard Worker uint32_t tv_nsec = 0; 31*598139dcSAndroid Build Coastguard Worker } 32*598139dcSAndroid Build Coastguard Worker 33*598139dcSAndroid Build Coastguard Worker struct android_event_header_t { 34*598139dcSAndroid Build Coastguard Worker int32_t tag; 35*598139dcSAndroid Build Coastguard Worker }; 36*598139dcSAndroid Build Coastguard Worker 37*598139dcSAndroid Build Coastguard Worker struct android_event_list_t { 38*598139dcSAndroid Build Coastguard Worker int8_t type; // EVENT_TYPE_LIST 39*598139dcSAndroid Build Coastguard Worker int8_t element_count; 40*598139dcSAndroid Build Coastguard Worker }; 41*598139dcSAndroid Build Coastguard Worker 42*598139dcSAndroid Build Coastguard Worker struct android_event_float_t { 43*598139dcSAndroid Build Coastguard Worker int8_t type; // EVENT_TYPE_FLOAT 44*598139dcSAndroid Build Coastguard Worker float data; 45*598139dcSAndroid Build Coastguard Worker }; 46*598139dcSAndroid Build Coastguard Worker 47*598139dcSAndroid Build Coastguard Worker struct android_event_int_t { 48*598139dcSAndroid Build Coastguard Worker int8_t type; // EVENT_TYPE_INT 49*598139dcSAndroid Build Coastguard Worker int32_t data; 50*598139dcSAndroid Build Coastguard Worker } android_event_int_t; 51*598139dcSAndroid Build Coastguard Worker 52*598139dcSAndroid Build Coastguard Worker struct android_event_long_t { 53*598139dcSAndroid Build Coastguard Worker int8_t type; // EVENT_TYPE_LONG 54*598139dcSAndroid Build Coastguard Worker int64_t data; 55*598139dcSAndroid Build Coastguard Worker }; 56*598139dcSAndroid Build Coastguard Worker 57*598139dcSAndroid Build Coastguard Worker struct android_event_string_t { 58*598139dcSAndroid Build Coastguard Worker int8_t type; // EVENT_TYPE_STRING; 59*598139dcSAndroid Build Coastguard Worker int32_t length; 60*598139dcSAndroid Build Coastguard Worker char data[]; 61*598139dcSAndroid Build Coastguard Worker }; 62*598139dcSAndroid Build Coastguard Worker 63*598139dcSAndroid Build Coastguard WorkerThe payload, excluding the header, has a max size of LOGGER_ENTRY_MAX_PAYLOAD. 64*598139dcSAndroid Build Coastguard Worker 65*598139dcSAndroid Build Coastguard Worker## header 66*598139dcSAndroid Build Coastguard Worker 67*598139dcSAndroid Build Coastguard WorkerThe header is added immediately before sending the log message to logd. 68*598139dcSAndroid Build Coastguard Worker 69*598139dcSAndroid Build Coastguard Worker## `string` payload 70*598139dcSAndroid Build Coastguard Worker 71*598139dcSAndroid Build Coastguard WorkerThe `string` part of the union is for normal buffers (main, system, radio, etc) and consists of a 72*598139dcSAndroid Build Coastguard Workersingle character priority, followed by a variable length null terminated string for the tag, and 73*598139dcSAndroid Build Coastguard Workerfinally a variable length null terminated string for the message. 74*598139dcSAndroid Build Coastguard Worker 75*598139dcSAndroid Build Coastguard WorkerThis payload is used for the `__android_log_buf_write()` family of functions. 76*598139dcSAndroid Build Coastguard Worker 77*598139dcSAndroid Build Coastguard Worker## `binary` payload 78*598139dcSAndroid Build Coastguard Worker 79*598139dcSAndroid Build Coastguard WorkerThe `binary` part of the union is for binary buffers (events, security, etc) and consists of an 80*598139dcSAndroid Build Coastguard Workerandroid_event_header_t struct followed by a variable number of android_event_*_t 81*598139dcSAndroid Build Coastguard Worker(android_event_list_t, android_event_int_t, etc) structs. 82*598139dcSAndroid Build Coastguard Worker 83*598139dcSAndroid Build Coastguard WorkerIf multiple android_event_*_t elements are present, then they must be in a list and the first 84*598139dcSAndroid Build Coastguard Workerelement in payload must be an android_event_list_t. 85*598139dcSAndroid Build Coastguard Worker 86*598139dcSAndroid Build Coastguard WorkerThis payload is used for the `__android_log_bwrite()` family of functions. It is additionally used 87*598139dcSAndroid Build Coastguard Workerfor `android_log_write_list()` and the related functions that manipulate event lists. 88*598139dcSAndroid Build Coastguard Worker 89*598139dcSAndroid Build Coastguard Worker# logd -> liblog 90*598139dcSAndroid Build Coastguard Worker 91*598139dcSAndroid Build Coastguard Workerlogd sends a `logger_entry` struct to liblog followed by the payload. The payload is identical to 92*598139dcSAndroid Build Coastguard Workerthe payloads defined above. The max size of the entire message from logd is LOGGER_ENTRY_MAX_LEN. 93