Codebeispiele für den Kern

Mit den Codebeispielen für SDV Core-Dienste in /system/software_defined_vehicle/samples können Sie mit der Entwicklung Ihrer Dienste beginnen. Jedes Beispiel enthält eine README-Datei, in der der Anwendungsfall beschrieben wird.

Logging API verwenden

Weitere Informationen zu den Anweisungen finden Sie unter:

Einfaches Logbeispiel

In logging.cpp wird das Schreiben in die Puffer main, system und radio dargestellt. Eine kurze Beschreibung der verfügbaren Logpuffer finden Sie unter Alternative Logpuffer ansehen.

  • So führen Sie das Beispiel ohne die bedingten Logs wie ALOGI_IF aus:

    logging_sdv_sample
    
  • So führen Sie das Beispiel aus und geben die bedingten Logs wie ALOGI_IF aus:

    LOGIF=1 logging_sdv_sample
    

Beispiel für strukturiertes Logging

Beispieldatei: structured_logging.cpp

  • So führen Sie das Beispiel aus, bei dem Logs in den Logpuffer events geschrieben werden:

    structured_logging_sdv_sample
    

Die Logpuffer event, security und stats enthalten strukturierte Daten anstelle von Freitext.

Strukturierte Daten werden mit der Event List API protokolliert. Diese wird immer mit der Priorität INFO und der numerischen Tag-ID protokolliert.

Eine .logtags Datei kann mit einem logtags Attribut in Android.bp. definiert werden. Wenn sie angegeben ist, leitet logcat den Tag-Namen aus der numerischen Tag ID ab. Der Tag-Name kann dann zum Filtern strukturierter Logs verwendet werden. Weitere Informationen und eine Beschreibung des Dateiformats finden Sie im Kommentar in der logcat event.logtags Datei.

Während des Build-Prozesses werden alle logtags-Dateien zusammengeführt und in der Datei /system/etc/event-log-tags im Android-Systemimage platziert.

Beispiel für die Filterung von Kompilierungszeit-Logs kompilieren

Beispieldatei: compile_time_log_filtering.cpp

Dieses Beispiel enthält Makros, die Sie anpassen können, um einige Logs aus der ausführbaren Datei zu entfernen. Weitere Informationen finden Sie im Quellcode.

Beispiel für die Logfilterung: log_filtering.cpp

  • So führen Sie das Beispiel aus und legen die Mindestpriorität für Logs auf WARN fest:

    LOGLEVEL=WARN log_filtering_sdv_sample
    

Die Logfilterung wird durch Systemeigenschaften beeinflusst. Für alle Logs mit :

  • log.tag.<tag>
  • persist.log.tag.<tag>

Für alle Logs im System:

  • log.tag
  • persist.log.tag

Um die ausgewählte Logebene auszuwählen, die in der Reihenfolge geprüft wird, kann jeder Wert auf V, D, I, W oder E festgelegt werden.

Die effektive Logebene ist die Ebene, die für die erste Systemeigenschaft mit einem Wert festgelegt wurde. Sie kann niedriger oder höher sein als die Logebene, die von der App mit einem __android_log_set_minimum_priority-Aufruf festgelegt wurde. Wenn keine der Eigenschaften festgelegt ist, gilt die mit __android_log_set_minimum_priority konfigurierte Ebene.

Weitere Informationen finden Sie unter dem Logging-System-Überblick.

  • So führen Sie das Beispiel aus und legen das Standard-Log-Tag auf example_tag fest:

    LOGTAG=example_tag log_filtering_sdv_sample
    

Das Beispiel enthält auch eine auskommentierte LOG_TAG-Makrodefinition, mit der Sie das Log-Tag für alle Logmeldungen festlegen können. Das auf diese Weise festgelegte Tag überschreibt das Tag, das zur Laufzeit mit __android_log_set_default_tag festgelegt wurde.

Wenn das LOG_TAG-Makro nicht definiert ist und die App __android_log_set_default_tag nicht aufruft, ist das Standard-Tag das Ergebnis von getprogname(). Beispielsweise der Name der ausführbaren Datei.