/system/software_defined_vehicle/samples 中的 SDV 核心服务代码示例可帮助您开始构建服务。每个示例都包含一个描述相应用例的 README 文件。
使用 Logging API
如需详细了解所提供的说明,请参阅:
基本日志示例
logging.cpp 显示了写入 main、system 和 radio 缓冲区的过程。如需简要了解可用的日志缓冲区,请参阅查看备用日志缓冲区。
如需在不使用条件日志(例如
ALOGI_IF)的情况下运行示例,请执行以下操作:logging_sdv_sample如需运行示例并输出条件日志(例如
ALOGI_IF),请执行以下操作:LOGIF=1 logging_sdv_sample
结构化日志记录示例
示例文件:structured_logging.cpp
如需运行将日志写入
events日志缓冲区的示例,请执行以下操作:structured_logging_sdv_sample
event、security 和 stats 日志缓冲区保存的是结构化数据,而不是自由文本。
结构化数据使用事件列表 API 进行记录,该 API 始终使用 INFO 优先级和数字标记 ID 进行记录。
可以使用 Android.bp. 中的 logtags 属性定义 .logtags 文件。如果提供此属性,logcat 会使用它从数字标记 ID 派生出标记名称。然后,标记名称可用于过滤结构化日志。如需了解详情和文件格式说明,请参阅 logcat event.logtags 文件中的注释。
在构建流程中,所有 logtags 文件都会合并并放置到 Android 系统映像中的 /system/etc/event-log-tags 文件中。
编译时间日志过滤示例
示例文件:compile_time_log_filtering.cpp
此示例包含一些宏,您可以调整这些宏以从可执行文件中移除某些日志。如需了解详情,请参阅源代码。
日志过滤示例:log_filtering.cpp
如需运行示例,请将最低日志优先级设置为
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
日志过滤会受到系统属性的影响。对于所有包含
log.tag.<tag>persist.log.tag.<tag>
对于系统中的所有日志:
log.tagpersist.log.tag
如需选择所选日志级别(按顺序勾选),每个值都可以设置为 V、D、I、W 或 E。
有效日志级别是第一个具有值的系统属性上设置的级别,该级别可能低于或高于应用通过 __android_log_set_minimum_priority 调用设置的日志级别。如果未设置任何属性,则应用使用 __android_log_set_minimum_priority 配置的级别。
如需了解详情,请参阅 Logging 系统概览。
运行示例,将默认日志标记设置为
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
该示例还包含一个被注释掉的 LOG_TAG 宏定义,您可以使用该宏定义为所有日志消息设置日志标记。以这种方式设置的标记会覆盖在运行时通过 __android_log_set_default_tag 设置的标记。
如果未定义 LOG_TAG 宏,并且应用未调用 __android_log_set_default_tag,则默认标记是 getprogname() 的结果。例如,可执行文件的名称。