[ English | 简体中文 ]
ALOG 简介
ALOG(Android Log)是一个常用的日志宏集,提供了一个简化的方式来记录日志信息。它是对 __android_log_print 函数的一个宏封装,使得在 C 或 C++ 代码中记录日志更加方便和直观。
数据结构定义
LOG 优先级
LOG 优先级用于控制不同等级的 LOG 过滤,可以通过 CONFIG_ALOG 控制默认输出的 LOG 级别:
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0, // 未知
ANDROID_LOG_DEFAULT, //默认
ANDROID_LOG_VERBOSE, //冗长
ANDROID_LOG_DEBUG, //调试
ANDROID_LOG_INFO, //信息
ANDROID_LOG_WARN, //警告
ANDROID_LOG_ERROR, //错误
ANDROID_LOG_FATAL, //致命
ANDROID_LOG_SILENT, //静默
} android_LogPriority;
LOG ID
LOG ID 用于标识特定的日志缓冲区,用于 __android_log_buf_write() 和 __android_log_buf_print()。
typedef enum log_id {
LOG_ID_MIN = 0,
LOG_ID_MAIN = 0,
LOG_ID_RADIO = 1,
LOG_ID_EVENTS = 2,
LOG_ID_SYSTEM = 3,
LOG_ID_CRASH = 4,
LOG_ID_STATS = 5,
LOG_ID_SECURITY = 6,
LOG_ID_KERNEL = 7,
LOG_ID_MAX,
LOG_ID_DEFAULT = 0x7FFFFFFF
} log_id_t;
API 列表
下面是原始的 LOG API 的定义及参数说明:
/**
* @brief 将一个字符串写入日志系统。
*
* @param prio 日志消息的优先级,使用 `android_LogPriority` 枚举值。
* @param tag 与日志消息关联的标签。
* @param text 要记录的常量字符串。
* @return int 成功时返回0,失败时返回非0值。
*/
int __android_log_write(int prio, const char* tag, const char* text);
/**
* @brief 以格式化的方式写入日志消息。
*
* @param prio 日志消息的优先级,使用 `android_LogPriority` 枚举值。
* @param tag 与日志消息关联的标签。
* @param fmt 格式化字符串,后跟一系列参数。
* @return int 成功时返回0,失败时返回非0值。
*/
int __android_log_print(int prio, const char* tag, const char* fmt, ...);
/**
* @brief 使用可变参数列表以格式化的方式写入日志消息。
*
* @param prio 日志消息的优先级,使用 `android_LogPriority` 枚举值。
* @param tag 与日志消息关联的标签。
* @param fmt 格式化字符串。
* @param ap 包含所有参数的可变参数列表。
* @return int 成功时返回0,失败时返回非0值。
*/
int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap);
/**
* @brief 在条件失败时写入一条断言消息到日志系统。
*
* @param cond 断言条件的字符串表示。
* @param tag 与日志消息关联的标签。
* @param fmt 格式化字符串,后跟一系列参数(可选)。
*/
void __android_log_assert(const char* cond, const char* tag, const char* fmt, ...);
除原始 API 以外,ALOG 还提供了一系列的宏用于简化使用:
/**
* @brief 发送一个指定级别的日志。
*
* @param ... 可变参数列表,格式和参数类似于 printf 函数。
*/
#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#define ALOGI(...) ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__))
#define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
/**
* @brief 当条件为真时,写入日志。
*
* @param cond 评估的条件。
* @param ... 可变参数列表,格式和参数类似于 printf 函数。
*/
#define ALOGV_IF(cond, ...)
#define ALOGD_IF(cond, ...)
#define ALOGI_IF(cond, ...)
#define ALOGW_IF(cond, ...)
#define ALOGE_IF(cond, ...)
使用示例
#include <log/log.h>
#define LOG_TAG "MyAppTag"
void log_info_alogi() {
}
int main() {
// 自定义优先级打印 log
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "Formatted number: %d", 42);
// 使用宏打印 INFO 级别 log
ALOGI("ALOGI: A log message from my app.");
return 0;
}