Przykłady kodu usług podstawowych SDV w /system/software_defined_vehicle/samplesumożliwiają rozpoczęcie tworzenia usług. Każdy przykład zawiera plik README opisujący przypadek użycia.
Korzystanie z interfejsu Logging API
Więcej informacji o podanych instrukcjach znajdziesz w tych artykułach:
Przykładowy log podstawowy
logging.cpp zapisuje dane w buforach main, system i radio.
Aby przeczytać krótki opis dostępnych buforów logów, zobacz Wyświetlanie alternatywnych buforów logów.
Aby uruchomić przykład bez logów warunkowych, takich jak
ALOGI_IF:logging_sdv_sampleAby uruchomić przykład i wydrukować dzienniki warunkowe, np.
ALOGI_IF:LOGIF=1 logging_sdv_sample
Przykładowe logowanie strukturalne
Przykładowy plik: structured_logging.cpp
Aby uruchomić przykład, który zapisuje logi w buforze logów
events:structured_logging_sdv_sample
Bufory dziennika event, security i stats zawierają uporządkowane dane, a nie tekst swobodny.
Dane strukturalne są rejestrowane za pomocą interfejsu API listy zdarzeń, który zawsze rejestruje dane z priorytetem INFO i numerycznym identyfikatorem tagu.
Plik .logtags można zdefiniować za pomocą atrybutu logtags w Android.bp..logcat Jeśli ten atrybut jest podany, usługa korzysta z niego, aby wygenerować nazwę tagu na podstawie numerycznego identyfikatora tagu. Nazwy tagów można następnie używać do filtrowania logów strukturalnych. Szczegółowe informacje i opis formatu pliku znajdziesz w komentarzu w pliku logcat event.logtags.
Podczas procesu kompilacji wszystkie pliki logtags są łączone i umieszczane w pliku /system/etc/event-log-tags w obrazie systemu Android.
Kompilowanie przykładowego filtrowania logu czasu
Przykładowy plik: compile_time_log_filtering.cpp
Ten przykład zawiera makra, które możesz dostosować, aby usunąć niektóre logi z pliku wykonywalnego. Szczegółowe informacje znajdziesz w kodzie źródłowym.
Przykładowe filtrowanie logów: log_filtering.cpp
Aby uruchomić przykład, ustaw minimalny priorytet logu na
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
Na filtrowanie logów mają wpływ właściwości systemu. W przypadku wszystkich logów z
log.tag.<tag>persist.log.tag.<tag>
W przypadku wszystkich dzienników w systemie:
log.tagpersist.log.tag
Aby wybrać poziom logowania, który jest sprawdzany w kolejności, każda wartość może być ustawiona na V, D, I, W lub E.
Efektywny poziom rejestrowania to poziom ustawiony w pierwszej właściwości systemu, która ma wartość. Może on być niższy lub wyższy niż poziom rejestrowania ustawiony przez aplikację za pomocą wywołania __android_log_set_minimum_priority. Jeśli żadna z właściwości nie jest ustawiona, stosowany jest poziom skonfigurowany za pomocą __android_log_set_minimum_priority.
Więcej informacji znajdziesz w artykule Omówienie systemu rejestrowania.
Uruchom przykład, ustawiając domyślny tag dziennika na
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
Przykładowy kod zawiera też definicję makra LOG_TAG, którą możesz wykorzystać do ustawienia tagu logowania dla wszystkich wiadomości dziennika. Tag ustawiony w ten sposób zastępuje tag ustawiony w czasie działania za pomocą __android_log_set_default_tag.
Jeśli makro LOG_TAG nie jest zdefiniowane, a aplikacja nie wywołuje funkcji __android_log_set_default_tag, domyślny tag jest wynikiem funkcji getprogname(). Może to być na przykład nazwa pliku wykonywalnego.