Panoramica
Quando viene inviata una richiesta alla tua app, viene automaticamente scritto un log delle richieste in App Engine. Durante la gestione della richiesta, l'app può anche scrivere log dell'applicazione. In questa pagina scoprirai come scrivere i log dell'applicazione dalla tua applicazione, come visualizzare i log nella console Google Cloud e come interpretare i dati dei log delle richieste scritti da App Engine durante la richiesta.
Per informazioni sul download dei dati di log, consulta Panoramica delle esportazioni dei log.
Log delle richieste e log delle applicazioni
Esistono due categorie di dati dei 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 del log delle richieste per le descrizioni dei campi del log delle richieste.
Ogni log delle richieste contiene un elenco di log delle applicazioni (AppLogLine) associati alla richiesta, restituito nel metodo RequestLogs.getAppLogLines()
. Ogni log dell'app contiene la data e l'ora di scrittura del log, il messaggio del log e il livello del log.
Scrittura nei log delle applicazioni
L'SDK Java di App Engine consente a uno sviluppatore di registrare i seguenti livelli di gravità:- GRAVE
- AVVISO
- INFO
- CONFIGURA
- BENE
- FINER
- MIGLIORE
I livelli di log INFO
, WARNING
e SEVERE
vengono visualizzati nei log senza alcuna configurazione aggiuntiva. Per aggiungere altri livelli di logging all'app Java,
devi aggiungere le proprietà di sistema appropriate al file
appengine-web.xml
del progetto e potrebbe anche essere necessario modificare il
file logging.properties
per impostare il livello di log desiderato. Entrambi i file sono
Viene creato durante la creazione di un nuovo progetto Java di App Engine utilizzando Maven. Puoi trovare questi file
seguenti:
Per aggiungere livelli di log diversi da INFO
, WARNING
o SEVERE
, modifica il
appengine-web.xml
file per aggiungere quanto segue all'interno dei
<appengine-web-app>
tag:
<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 logging predefinito per tutti i componenti della tua app, modifica il file logging.properties
. Ad esempio, puoi cambiare .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 è in esecuzione, App Engine registra i messaggi e li rende disponibili Esplora log.
Formato dell'URL del log nella console Google Cloud
Di seguito è riportato un esempio di URL di 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 tipico log di App Engine contiene dati nell' 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 del log delle richieste
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 | Sì | Indirizzo IP client. Esempio: 192.0.2.0 |
2 | Identità RFC 1413 | No | L'identità RFC 1413 del client. Si tratta quasi sempre del carattere - |
3 | Utente | No | Presente solo se l'app utilizza l'API Users e l'utente ha eseguito l'accesso. Questo valore corrisponde alla parte "nickname" dell'Account Google. Ad esempio, se l'Account Google è test@example.com , il nickname registrato in questo campo è test . |
4 | Timestamp | Sì | Timestamp della richiesta. Esempio: [27/Jun/2014:09:11:47 -0700] |
5 | Query string della richiesta | Sì | Prima riga della richiesta, contenente metodo, percorso e versione HTTP. Esempio: GET / HTTP/1.1 |
6 | Codice di stato HTTP | Sì | Codice di stato HTTP restituito. Esempio: 200 |
7 | Dimensione della risposta | Sì | 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 | Sì | 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 | Sì | Il nome host utilizzato dal client per connettersi all'applicazione App Engine. Esempio : (1-dot-calm-sylph-602.appspot.com ) |
11 | Tempo reale | Sì | Tempo totale della richiesta in millisecondi speso da App Engine per la richiesta. Questa durata non include il tempo trascorso tra il client e il server che esegue l'istanza della tua applicazione. Esempio: ms=195 . |
12 | Millisecondi della CPU | Sì | Millisecondi CPU necessari per soddisfare la richiesta. Si tratta del numero di millisecondi impiegati dalla CPU per eseguire il codice dell'applicazione, espresso in termini di una CPU Intel x86 di riferimento da 1,2 GHz. Se la CPU effettivamente utilizzata è più veloce della base di riferimento, i millisecondi di CPU possono essere maggiori del tempo di clock effettivo definito sopra. Esempio: cpu_ms=42 |
13 | Codice di uscita | No | Presente solo se l'istanza si è 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 destinati principalmente ad aiutare Google a individuare e risolvere i problemi. |
14 | Costo stimato | Sì | OBSOLETO. Costo stimato di 1000 richieste come questa, in $. 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 delle 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 è rimasta in attesa per un po' di tempo in una coda in attesa. Se ne trovi molti nei log e/o i valori sono elevati, potrebbe essere un'indicazione del fatto che hai bisogno di più istanze per gestire il traffico. Esempio: pending_ms=195 |
18 | Caricamento della richiesta | No | Presente solo se la richiesta è una richiesta di caricamento. Ciò significa che è stato necessario avviare un'istanza. Idealmente, le istanze dovrebbero essere attive e funzionanti il più a lungo possibile, in modo da soddisfare un numero elevato di richieste prima di essere riutilizzate e di dover essere riavviate. Ciò significa che non dovresti vederne troppi nei tuoi log. Esempio: loading_request=1 . |
19 | Istanza | Sì | Identificatore univoco per l'istanza che gestisce la richiesta. Esempio: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d |
20 | Versione | Sì | La versione corrente della release di App Engine utilizzata in App Engine di produzione: |
Quote e limiti
La tua applicazione è interessata dalle seguenti quote relative ai log:
- Dati dei log recuperati tramite l'API Logs.
- Allocazione e conservazione per l'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 gratuiti. I dati superiori a 100 megabyte comportano l'addebito di 0,12 $/GB.
Allocazione per l'immissione dei log
Il logging per le app di App Engine è fornito da Google Cloud Observability. Per ulteriori informazioni su costi e limiti di registrazione, consulta la pagina Prezzi di Google Cloud Observability. Per l'archiviazione a lungo termine dei log, puoi esportare i log da Google Cloud Observability in Cloud Storage, BigQuery e Pub/Sub.