xref: /aosp_15_r20/system/logging/liblog/README.md (revision 598139dc91b21518d67c408eaea2644226490971)
1*598139dcSAndroid Build Coastguard WorkerAndroid liblog
2*598139dcSAndroid Build Coastguard Worker--------------
3*598139dcSAndroid Build Coastguard Worker
4*598139dcSAndroid Build Coastguard WorkerPublic Functions and Macros
5*598139dcSAndroid Build Coastguard Worker---------------------------
6*598139dcSAndroid Build Coastguard Worker
7*598139dcSAndroid Build Coastguard Worker    /*
8*598139dcSAndroid Build Coastguard Worker     * Please limit to 24 characters for runtime is loggable,
9*598139dcSAndroid Build Coastguard Worker     * 16 characters for persist is loggable, and logcat pretty
10*598139dcSAndroid Build Coastguard Worker     * alignment with limit of 7 characters.
11*598139dcSAndroid Build Coastguard Worker    */
12*598139dcSAndroid Build Coastguard Worker    #define LOG_TAG "yourtag"
13*598139dcSAndroid Build Coastguard Worker    #include <log/log.h>
14*598139dcSAndroid Build Coastguard Worker
15*598139dcSAndroid Build Coastguard Worker    ALOG(android_priority, tag, format, ...)
16*598139dcSAndroid Build Coastguard Worker    IF_ALOG(android_priority, tag)
17*598139dcSAndroid Build Coastguard Worker    LOG_PRI(priority, tag, format, ...)
18*598139dcSAndroid Build Coastguard Worker    LOG_PRI_VA(priority, tag, format, args)
19*598139dcSAndroid Build Coastguard Worker    #define LOG_TAG NULL
20*598139dcSAndroid Build Coastguard Worker    ALOGV(format, ...)
21*598139dcSAndroid Build Coastguard Worker    SLOGV(format, ...)
22*598139dcSAndroid Build Coastguard Worker    RLOGV(format, ...)
23*598139dcSAndroid Build Coastguard Worker    ALOGV_IF(cond, format, ...)
24*598139dcSAndroid Build Coastguard Worker    SLOGV_IF(cond, format, ...)
25*598139dcSAndroid Build Coastguard Worker    RLOGV_IF(cond, format, ...)
26*598139dcSAndroid Build Coastguard Worker    IF_ALOGC()
27*598139dcSAndroid Build Coastguard Worker    ALOGD(format, ...)
28*598139dcSAndroid Build Coastguard Worker    SLOGD(format, ...)
29*598139dcSAndroid Build Coastguard Worker    RLOGD(format, ...)
30*598139dcSAndroid Build Coastguard Worker    ALOGD_IF(cond, format, ...)
31*598139dcSAndroid Build Coastguard Worker    SLOGD_IF(cond, format, ...)
32*598139dcSAndroid Build Coastguard Worker    RLOGD_IF(cond, format, ...)
33*598139dcSAndroid Build Coastguard Worker    IF_ALOGD()
34*598139dcSAndroid Build Coastguard Worker    ALOGI(format, ...)
35*598139dcSAndroid Build Coastguard Worker    SLOGI(format, ...)
36*598139dcSAndroid Build Coastguard Worker    RLOGI(format, ...)
37*598139dcSAndroid Build Coastguard Worker    ALOGI_IF(cond, format, ...)
38*598139dcSAndroid Build Coastguard Worker    SLOGI_IF(cond, format, ...)
39*598139dcSAndroid Build Coastguard Worker    RLOGI_IF(cond, format, ...)
40*598139dcSAndroid Build Coastguard Worker    IF_ALOGI()
41*598139dcSAndroid Build Coastguard Worker    ALOGW(format, ...)
42*598139dcSAndroid Build Coastguard Worker    SLOGW(format, ...)
43*598139dcSAndroid Build Coastguard Worker    RLOGW(format, ...)
44*598139dcSAndroid Build Coastguard Worker    ALOGW_IF(cond, format, ...)
45*598139dcSAndroid Build Coastguard Worker    SLOGW_IF(cond, format, ...)
46*598139dcSAndroid Build Coastguard Worker    RLOGW_IF(cond, format, ...)
47*598139dcSAndroid Build Coastguard Worker    IF_ALOGW()
48*598139dcSAndroid Build Coastguard Worker    ALOGE(format, ...)
49*598139dcSAndroid Build Coastguard Worker    SLOGE(format, ...)
50*598139dcSAndroid Build Coastguard Worker    RLOGE(format, ...)
51*598139dcSAndroid Build Coastguard Worker    ALOGE_IF(cond, format, ...)
52*598139dcSAndroid Build Coastguard Worker    SLOGE_IF(cond, format, ...)
53*598139dcSAndroid Build Coastguard Worker    RLOGE_IF(cond, format, ...)
54*598139dcSAndroid Build Coastguard Worker    IF_ALOGE()
55*598139dcSAndroid Build Coastguard Worker    LOG_FATAL(format, ...)
56*598139dcSAndroid Build Coastguard Worker    LOG_ALWAYS_FATAL(format, ...)
57*598139dcSAndroid Build Coastguard Worker    LOG_FATAL_IF(cond, format, ...)
58*598139dcSAndroid Build Coastguard Worker    LOG_ALWAYS_FATAL_IF(cond, format, ...)
59*598139dcSAndroid Build Coastguard Worker    ALOG_ASSERT(cond, format, ...)
60*598139dcSAndroid Build Coastguard Worker    LOG_EVENT_INT(tag, value)
61*598139dcSAndroid Build Coastguard Worker    LOG_EVENT_LONG(tag, value)
62*598139dcSAndroid Build Coastguard Worker
63*598139dcSAndroid Build Coastguard Worker    log_id_t android_logger_get_id(struct logger *logger)
64*598139dcSAndroid Build Coastguard Worker    int android_logger_clear(struct logger *logger)
65*598139dcSAndroid Build Coastguard Worker    int android_logger_get_log_size(struct logger *logger)
66*598139dcSAndroid Build Coastguard Worker    int android_logger_get_log_readable_size(struct logger *logger)
67*598139dcSAndroid Build Coastguard Worker    int android_logger_get_log_version(struct logger *logger)
68*598139dcSAndroid Build Coastguard Worker
69*598139dcSAndroid Build Coastguard Worker    struct logger_list *android_logger_list_alloc(int mode, unsigned int tail, pid_t pid)
70*598139dcSAndroid Build Coastguard Worker    struct logger *android_logger_open(struct logger_list *logger_list, log_id_t id)
71*598139dcSAndroid Build Coastguard Worker    struct logger_list *android_logger_list_open(log_id_t id, int mode, unsigned int tail, pid_t pid)
72*598139dcSAndroid Build Coastguard Worker    int android_logger_list_read(struct logger_list *logger_list, struct log_msg *log_msg)
73*598139dcSAndroid Build Coastguard Worker    void android_logger_list_free(struct logger_list *logger_list)
74*598139dcSAndroid Build Coastguard Worker
75*598139dcSAndroid Build Coastguard Worker    log_id_t android_name_to_log_id(const char *logName)
76*598139dcSAndroid Build Coastguard Worker    const char *android_log_id_to_name(log_id_t log_id)
77*598139dcSAndroid Build Coastguard Worker
78*598139dcSAndroid Build Coastguard Worker    android_log_context create_android_logger(uint32_t tag)
79*598139dcSAndroid Build Coastguard Worker
80*598139dcSAndroid Build Coastguard Worker    int android_log_write_list_begin(android_log_context ctx)
81*598139dcSAndroid Build Coastguard Worker    int android_log_write_list_end(android_log_context ctx)
82*598139dcSAndroid Build Coastguard Worker
83*598139dcSAndroid Build Coastguard Worker    int android_log_write_int32(android_log_context ctx, int32_t value)
84*598139dcSAndroid Build Coastguard Worker    int android_log_write_int64(android_log_context ctx, int64_t value)
85*598139dcSAndroid Build Coastguard Worker    int android_log_write_string8(android_log_context ctx, const char *value)
86*598139dcSAndroid Build Coastguard Worker    int android_log_write_string8_len(android_log_context ctx, const char *value, size_t maxlen)
87*598139dcSAndroid Build Coastguard Worker    int android_log_write_float32(android_log_context ctx, float value)
88*598139dcSAndroid Build Coastguard Worker
89*598139dcSAndroid Build Coastguard Worker    int android_log_write_list(android_log_context ctx, log_id_t id = LOG_ID_EVENTS)
90*598139dcSAndroid Build Coastguard Worker
91*598139dcSAndroid Build Coastguard Worker    android_log_context create_android_log_parser(const char *msg, size_t len)
92*598139dcSAndroid Build Coastguard Worker    android_log_list_element android_log_read_next(android_log_context ctx)
93*598139dcSAndroid Build Coastguard Worker    android_log_list_element android_log_peek_next(android_log_context ctx)
94*598139dcSAndroid Build Coastguard Worker
95*598139dcSAndroid Build Coastguard Worker    int android_log_destroy(android_log_context *ctx)
96*598139dcSAndroid Build Coastguard Worker
97*598139dcSAndroid Build Coastguard WorkerDescription
98*598139dcSAndroid Build Coastguard Worker-----------
99*598139dcSAndroid Build Coastguard Worker
100*598139dcSAndroid Build Coastguard Workerliblog represents an interface to the volatile Android Logging system for NDK (Native) applications
101*598139dcSAndroid Build Coastguard Workerand libraries.  Interfaces for either writing or reading logs.  The log buffers are divided up in
102*598139dcSAndroid Build Coastguard WorkerMain, System, Radio and Events sub-logs.
103*598139dcSAndroid Build Coastguard Worker
104*598139dcSAndroid Build Coastguard WorkerThe logging interfaces are a series of macros, all of which can be overridden individually in order
105*598139dcSAndroid Build Coastguard Workerto control the verbosity of the application or library.  `[ASR]LOG[VDIWE]` calls are used to log to
106*598139dcSAndroid Build Coastguard WorkerBasic, System or Radio sub-logs in either the Verbose, Debug, Info, Warning or Error priorities.
107*598139dcSAndroid Build Coastguard Worker`[ASR]LOG[VDIWE]_IF` calls are used to perform thus based on a condition being true.
108*598139dcSAndroid Build Coastguard Worker`IF_ALOG[VDIWE]` calls are true if the current `LOG_TAG` is enabled at the specified priority.
109*598139dcSAndroid Build Coastguard Worker`LOG_ALWAYS_FATAL` is used to `ALOG` a message, then kill the process.  `LOG_FATAL` call is a
110*598139dcSAndroid Build Coastguard Workervariant of `LOG_ALWAYS_FATAL`, only enabled in engineering, and not release builds.  `ALOG_ASSERT`
111*598139dcSAndroid Build Coastguard Workeris used to `ALOG` a message if the condition is false; the condition is part of the logged message.
112*598139dcSAndroid Build Coastguard Worker`LOG_EVENT_(INT|LONG)` is used to drop binary content into the Events sub-log.
113*598139dcSAndroid Build Coastguard Worker
114*598139dcSAndroid Build Coastguard WorkerThe log reading interfaces permit opening the logs either singly or multiply, retrieving a log entry
115*598139dcSAndroid Build Coastguard Workerat a time in time sorted order, optionally limited to a specific pid and tail of the log(s) and
116*598139dcSAndroid Build Coastguard Workerfinally a call closing the logs.  A single log can be opened with `android_logger_list_open()`; or
117*598139dcSAndroid Build Coastguard Workermultiple logs can be opened with `android_logger_list_alloc()`, calling in turn the
118*598139dcSAndroid Build Coastguard Worker`android_logger_open()` for each log id.  Each entry can be retrieved with
119*598139dcSAndroid Build Coastguard Worker`android_logger_list_read()`.  The log(s) can be closed with `android_logger_list_free()`.
120*598139dcSAndroid Build Coastguard Worker`ANDROID_LOG_NONBLOCK` mode will report when the log reading is done with an `EAGAIN` error return
121*598139dcSAndroid Build Coastguard Workercode, otherwise the `android_logger_list_read()` call will block for new entries.
122*598139dcSAndroid Build Coastguard Worker
123*598139dcSAndroid Build Coastguard WorkerThe `ANDROID_LOG_WRAP` mode flag to the `android_logger_list_alloc_time()` signals logd to quiesce
124*598139dcSAndroid Build Coastguard Workerthe reader until the buffer is about to prune at the start time then proceed to dumping content.
125*598139dcSAndroid Build Coastguard Worker
126*598139dcSAndroid Build Coastguard WorkerThe `ANDROID_LOG_PSTORE` mode flag to the `android_logger_open()` is used to switch from the active
127*598139dcSAndroid Build Coastguard Workerlogs to the persistent logs from before the last reboot.
128*598139dcSAndroid Build Coastguard Worker
129*598139dcSAndroid Build Coastguard WorkerThe value returned by `android_logger_open()` can be used as a parameter to the
130*598139dcSAndroid Build Coastguard Worker`android_logger_clear()` function to empty the sub-log.
131*598139dcSAndroid Build Coastguard Worker
132*598139dcSAndroid Build Coastguard WorkerThe value returned by `android_logger_open()` can be used as a parameter to the
133*598139dcSAndroid Build Coastguard Worker`android_logger_get_log_(size|readable_size|version)` to retrieve the sub-log maximum size, readable
134*598139dcSAndroid Build Coastguard Workersize and log buffer format protocol version respectively.  `android_logger_get_id()` returns the id
135*598139dcSAndroid Build Coastguard Workerthat was used when opening the sub-log.
136*598139dcSAndroid Build Coastguard Worker
137*598139dcSAndroid Build Coastguard WorkerErrors
138*598139dcSAndroid Build Coastguard Worker------
139*598139dcSAndroid Build Coastguard Worker
140*598139dcSAndroid Build Coastguard WorkerIf messages fail, a negative error code will be returned to the caller.
141*598139dcSAndroid Build Coastguard Worker
142*598139dcSAndroid Build Coastguard WorkerThe `-ENOTCONN` return code indicates that the logger daemon is stopped.
143*598139dcSAndroid Build Coastguard Worker
144*598139dcSAndroid Build Coastguard WorkerThe `-EBADF` return code indicates that the log access point can not be opened, or the log buffer id
145*598139dcSAndroid Build Coastguard Workeris out of range.
146*598139dcSAndroid Build Coastguard Worker
147*598139dcSAndroid Build Coastguard WorkerFor the `-EAGAIN` return code, this means that the logging message was temporarily backed-up either
148*598139dcSAndroid Build Coastguard Workerbecause of Denial Of Service (DOS) logging pressure from some spammy application or service in the
149*598139dcSAndroid Build Coastguard WorkerAndroid system, or if too small of a value is set in /proc/sys/net/unix/max_dgram_qlen.  To aid in
150*598139dcSAndroid Build Coastguard Workerdiagnosing the occurence of this, a binary event from liblog will be sent to the log daemon once a
151*598139dcSAndroid Build Coastguard Workernew message can get through indicating how many messages were dropped as a result.  Please take
152*598139dcSAndroid Build Coastguard Workeraction to resolve the structural problems at the source.
153*598139dcSAndroid Build Coastguard Worker
154*598139dcSAndroid Build Coastguard WorkerIt is generally not advised for the caller to retry the `-EAGAIN` return code as this will only make
155*598139dcSAndroid Build Coastguard Workerthe problem(s) worse and cause your application to temporarily drop to the logger daemon priority,
156*598139dcSAndroid Build Coastguard WorkerBATCH scheduling policy and background task cgroup. If you require a group of messages to be passed
157*598139dcSAndroid Build Coastguard Workeratomically, merge them into one message with embedded newlines to the maximum length
158*598139dcSAndroid Build Coastguard Worker`LOGGER_ENTRY_MAX_PAYLOAD`.
159*598139dcSAndroid Build Coastguard Worker
160*598139dcSAndroid Build Coastguard WorkerOther return codes from writing operation can be returned.  Since the library retries on `EINTR`,
161*598139dcSAndroid Build Coastguard Worker`-EINTR` should never be returned.
162