xref: /aosp_15_r20/system/logging/liblog/README.protocol.md (revision 598139dc91b21518d67c408eaea2644226490971)
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