Примеры кода основных сервисов SDV, расположенные в /system/software_defined_vehicle/samples помогут вам начать создавать собственные сервисы. Каждый пример содержит файл README , описывающий сценарий использования.
Используйте 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 списка событий, при этом запись всегда осуществляется с приоритетом INFO и числовым идентификатором тега.
Файл .logtags можно определить с помощью атрибута logtags в Android.bp. Если он указан, logcat использует его для получения имени тега из числового идентификатора тега. Затем имя тега можно использовать для фильтрации структурированных логов. Подробности и описание формата файла см. в комментарии в файле logcat event.logtags .
В процессе сборки все файлы logtags объединяются и помещаются в файл /system/etc/event-log-tags в образе системы Android.
Составьте пример фильтрации временного журнала.
Пример файла: compile_time_log_filtering.cpp
Этот пример содержит макросы, которые можно настроить для удаления некоторых записей из исполняемого файла. Подробности см. в исходном коде.
Пример фильтрации логов: log_filtering.cpp
Для запуска примера установите минимальный приоритет логирования на
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
Фильтрация журналов зависит от системных свойств. Для всех журналов, содержащих
-
log.tag.<tag> -
persist.log.tag.<tag>
Для просмотра всех журналов в системе:
-
log.tag -
persist.log.tag
Для выбора уровня логарифмирования, которые проверяются по порядку, каждому значению можно присвоить значение V , D , I , W или E
Эффективный уровень логирования — это уровень, установленный для первого системного свойства, имеющего значение, который может быть ниже или выше уровня логирования, установленного приложением с помощью вызова __android_log_set_minimum_priority . Если ни одно из свойств не установлено, применяется уровень, настроенный с помощью __android_log_set_minimum_priority .
Более подробную информацию см. в обзоре системы регистрации событий .
Запустите пример, установив в качестве тега журнала по умолчанию значение
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
В примере также содержится закомментированное определение макроса LOG_TAG , которое можно использовать для установки тега для всех сообщений журнала. Установленный таким образом тег переопределяет тег, установленный во время выполнения с помощью __android_log_set_default_tag .
Если макрос LOG_TAG не определен и приложение не вызывает функцию __android_log_set_default_tag , то в качестве тега по умолчанию используется результат функции getprogname() . Например, имя исполняемого файла.