Lettura e scrittura nei log delle applicazioni

Panoramica

Quando viene inviata una richiesta alla tua app, App Engine scrive automaticamente un log delle richieste. Durante la gestione della richiesta, la tua app può anche scrivere log dell'applicazione. In questa pagina imparerai a scrivere i log delle applicazioni dalla tua applicazione, a visualizzare la registrazione nella consoleGoogle Cloud e a comprendere i dati dei log delle richieste che App Engine scrive durante la richiesta.

Per informazioni sul download dei dati di log, vedi Panoramica delle esportazioni dei log.

Log delle richieste e log delle applicazioni

Esistono due categorie di dati di log: log delle richieste e log delle applicazioni. Un log delle richieste viene scritto automaticamente da App Engine per ogni richiesta gestita dalla tua app e contiene informazioni come l'ID progetto, la versione HTTP e così via. Per un elenco completo delle proprietà disponibili per i log delle richieste, consulta RequestLogs. Consulta anche la tabella dei log delle richieste per le descrizioni dei campi dei log delle richieste.

Ogni log delle richieste contiene un elenco di log delle applicazioni (AppLogLine) associati a quella richiesta, restituiti nel metodo RequestLogs.getAppLogLines(). Ogni log dell'app contiene l'ora in cui è stato scritto, il messaggio di log e il livello di log.

Scrittura dei log delle applicazioni

L'SDK Java di App Engine consente a uno sviluppatore di registrare i seguenti livelli di gravità:

  • SEVERE
  • AVVISO
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

I livelli di log INFO, WARNING e SEVERE vengono visualizzati nei log senza configurazione aggiuntiva. Per aggiungere altri livelli di logging alla tua app Java, devi aggiungere le proprietà di sistema appropriate al file appengine-web.xml del progetto e potresti anche dover modificare il file logging.properties per impostare il livello di log desiderato. Entrambi questi file vengono creati quando crei un nuovo progetto App Engine Java utilizzando Maven. Puoi trovare questi file nelle seguenti posizioni:

Layout del progetto Maven

Per aggiungere livelli di log diversi da INFO, WARNING o SEVERE, modifica il file appengine-web.xml per aggiungere quanto segue all'interno dei tag <appengine-web-app>:

    <system-properties>
       <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

Il livello di log predefinito in logging.properties è INFO. Per modificare il livello di log predefinito per tutte le classi della tua app, modifica il file logging.properties per cambiare il livello. Ad esempio, potresti modificare .level = INFO in .level = WARNING.

Nel codice dell'applicazione, scrivi i messaggi di log utilizzando l'API java.util.logging.Logger. L'esempio seguente scrive un messaggio di log Info:

import java.util.logging.Logger;
//...

public class MyClass {

  private static final Logger log = Logger.getLogger(MyClass.class.getName());
  log.info("Your information log message.");
  //....

Quando l'app viene eseguita, App Engine registra i messaggi e li rende disponibili in Esplora log.

Formato dell'URL del log nella console Google Cloud

Vedi il seguente URL di esempio per un esempio di formato dell'URL del log nella console Google Cloud :

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Lettura dei log nella console

Per visualizzare i log scritti dalle app in esecuzione nell'ambiente standard, utilizza Esplora log.

Un log tipico di App Engine contiene dati nel formato di log combinato Apache, insieme ad alcuni campi speciali di App Engine, come mostrato nel seguente log di esempio:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Informazioni sui campi dei log di richiesta

La tabella seguente elenca i campi in ordine di occorrenza insieme a una descrizione:

Ordine dei campi Nome campo Sempre presente? Descrizione
1 Indirizzo client Indirizzo IP client. Esempio: 192.0.2.0
2 Identità RFC 1413 No Identità RFC 1413 del client. Quasi sempre si tratta del carattere -
3 Utente No Presente solo se l'app utilizza l'API Users e l'utente ha eseguito l'accesso. Questo valore è la parte "nickname" dell'Account Google. Ad esempio, se l'Account Google è test@example.com, il nickname registrato in questo campo è test.
4 Timestamp Timestamp della richiesta. Esempio: [27/Jun/2014:09:11:47 -0700]
5 Stringa di query della richiesta La prima riga della richiesta, contenente il metodo, il percorso e la versione HTTP. Esempio: GET / HTTP/1.1
6 Codice di stato HTTP Codice di stato HTTP restituito. Esempio: 200
7 Dimensione della risposta Dimensioni della risposta in byte. Esempio: 414
8 Percorso referrer No Se non è presente alcun referrer, il log non contiene alcun percorso, ma solo -. Esempio di percorso referrer: "http://www.example.com/index.html".
9 User-agent Identifica il browser e il sistema operativo per il server web. Esempio: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nome host Il nome host utilizzato dal client per connettersi all'applicazione App Engine. Esempio : (1-dot-calm-sylph-602.appspot.com)
11 Tempo reale Tempo totale in millisecondi trascorso da App Engine per la richiesta. Questa durata non include il tempo trascorso tra il client e il server che esegue l'istanza dell'applicazione. Esempio: ms=195.
12 Millisecondi CPU Millisecondi di CPU necessari per soddisfare la richiesta. Si tratta del numero di millisecondi trascorsi dalla CPU durante l'esecuzione del codice dell'applicazione, espresso in termini di CPU Intel x86 di base da 1,2 GHz. Se la CPU effettivamente utilizzata è più veloce della baseline, i millisecondi della CPU possono essere superiori al tempo di clock effettivo definito sopra. Esempio: cpu_ms=42
13 Codice di uscita No Presente solo se l'istanza è stata arrestata dopo aver ricevuto la richiesta. Nel formato exit_code=XXX, dove XXX è un numero di 3 cifre corrispondente al motivo dell'arresto dell'istanza. I codici di uscita non sono documentati perché sono pensati principalmente per aiutare Google a individuare e risolvere i problemi.
14 Costo stimato OBSOLETO. Costo stimato di 1000 richieste come questa, in dollari. Esempio: cpm_usd=0.000046
15 Nome coda No Il nome della coda di attività utilizzata. Presente solo se la richiesta ha utilizzato una coda di attività. Esempio: queue_name=default
16 Nome attività No Il nome dell'attività eseguita nella coda di attività per questa richiesta. Presente solo se la richiesta ha comportato l'inserimento in coda di un'attività. Esempio: task_name=7287390692361099748
17 Coda in attesa No Presente solo se una richiesta ha trascorso del tempo in una coda in attesa. Se nei log sono presenti molti di questi errori e/o i valori sono elevati, potrebbe essere necessario aumentare il numero di istanze per gestire il traffico. Esempio: pending_ms=195
18 Caricamento della richiesta in corso… No Presente solo se la richiesta è una richiesta di caricamento. Ciò significa che è stato necessario avviare un'istanza. Idealmente, le istanze devono essere attive e in stato integro il più a lungo possibile, gestendo un numero elevato di richieste prima di essere riciclate e dover essere riavviate. Ciò significa che non dovresti vederne troppi nei tuoi log. Esempio: loading_request=1.
19 Istanza Identificatore univoco dell'istanza che gestisce la richiesta. Esempio: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versione La versione attuale di App Engine utilizzata nella produzione di App Engine:

Quote e limiti

La tua applicazione è interessata dalle seguenti quote relative ai log:

  • Dati di log recuperati tramite l'API Logs.
  • Assegnazione e conservazione dell'importazione dei log.

Quota per i dati recuperati

I primi 100 megabyte di dati di log recuperati al giorno tramite le chiamate all'API Logs sono senza costi. I dati superiori a 100 megabyte comportano addebiti di 0,12 $/GB.

Allocazione per l'immissione dei log

Il logging per le app App Engine è fornito da Google Cloud Observability. Per ulteriori informazioni sui costi e sui limiti di logging, consulta la pagina Prezzi di Google Cloud Observability. Per l'archiviazione a lungo termine dei log, puoi esportare i log da Google Cloud Observability a Cloud Storage, BigQuery e Pub/Sub.