Esempi di codice principali

Gli esempi di codice dei servizi SDV Core in /system/software_defined_vehicle/samples ti consentono di iniziare a creare i tuoi servizi. Ogni esempio contiene un file README che descrive il caso d'uso.

Utilizzare l'API Logging

Per saperne di più sulle istruzioni fornite, consulta:

Esempio di log di base

logging.cpp presenta la scrittura nei buffer main, system e radio. Per leggere una breve descrizione dei buffer di log disponibili, vedi Visualizzare buffer di log alternativi.

  • Per eseguire l'esempio senza i log condizionali, ad esempio ALOGI_IF:

    logging_sdv_sample
    
  • Per eseguire l'esempio e stampare i log condizionali, ad esempio ALOGI_IF:

    LOGIF=1 logging_sdv_sample
    

Esempio di logging strutturato

File di esempio: structured_logging.cpp

  • Per eseguire l'esempio, che scrive i log nel buffer di log events:

    structured_logging_sdv_sample
    

I buffer di log event, security e stats contengono dati strutturati anziché testo libero.

I dati strutturati vengono registrati utilizzando l'API dell'elenco di eventi, che viene sempre registrata con priorità INFO e l'ID tag numerico.

È possibile definire un file .logtags con un attributo logtags in Android.bp. Se fornito, logcat lo utilizza per derivare il nome del tag dall'ID tag numerico. Il nome del tag può quindi essere utilizzato per filtrare i log strutturati. Per i dettagli e una descrizione del formato del file, consulta il commento nel logcat event.logtags file.

Durante il processo di compilazione, tutti i file logtags vengono uniti e inseriti nel file /system/etc/event-log-tags nell'immagine di sistema Android.

Compilare un esempio di filtro dei log in fase di compilazione

File di esempio: compile_time_log_filtering.cpp

Questo esempio contiene macro che puoi modificare per rimuovere alcuni log dall'eseguibile. Per i dettagli, consulta il codice sorgente.

Esempio di filtro dei log: log_filtering.cpp

  • Per eseguire l'esempio, impostando la priorità minima dei log su WARN:

    LOGLEVEL=WARN log_filtering_sdv_sample
    

Il filtro dei log è influenzato dalle proprietà di sistema. Per tutti i log con :

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

Per tutti i log nel sistema:

  • log.tag
  • persist.log.tag

Per selezionare il livello di log scelto, che viene controllato in ordine, ogni valore può essere impostato su V, D, I, W o E.

Il livello di log effettivo è il livello impostato sulla prima proprietà di sistema che ha un valore, che può essere inferiore o superiore al livello di log impostato dall'app con una chiamata __android_log_set_minimum_priority. Se non è impostata alcuna proprietà, viene applicato il livello configurato con __android_log_set_minimum_priority.

Per i dettagli, vedi la Panoramica del sistema di logging.

  • Esegui l'esempio, impostando il tag di log predefinito su example_tag:

    LOGTAG=example_tag log_filtering_sdv_sample
    

L'esempio contiene anche una definizione di macro LOG_TAG commentata che puoi utilizzare per impostare il tag di log per tutti i messaggi di log. Il tag impostato in questo modo sostituisce il tag impostato in fase di runtime con __android_log_set_default_tag.

Se la macro LOG_TAG non è definita e l'app non chiama __android_log_set_default_tag, il tag predefinito è il risultato di getprogname(). Ad esempio, il nome dell'eseguibile.