Примеры основного кода

Примеры кода основных сервисов 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() . Например, имя исполняемого файла.