Panoramica
Quando una richiesta viene inviata alla tua app, App Engine scrive automaticamente un log. Durante la gestione della richiesta, la tua app può anche scrivere log delle applicazioni. In questa pagina, scoprirai come scrivere i log delle applicazioni dalla tua applicazione, come visualizzare i log nella console Google Cloud e come interpretare i dati dei log delle richieste che App Engine scrive durante la richiesta.
Per informazioni sul download dei dati dei log, consulta la 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. App Engine scrive automaticamente un log delle richieste per ogni richiesta gestita dall'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, vedi RequestLogs. Per descrizioni dei campi del log delle richieste, consulta anche la tabella del log delle richieste.
Ogni log delle richieste contiene un elenco di log delle applicazioni (AppLogLine) associati alla richiesta, restituiti nel metodo RequestLogs.getAppLogLines()
. Ogni log dell'app contiene l'ora in cui è stato scritto il log, 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à:- Grave
- AVVISO
- INFO
- CONFIG
- BENE
- MIGLIORE
- MIGLIORE
I livelli di log, INFO
, WARNING
e SEVERE
, vengono visualizzati nei log senza ulteriori configurazioni. 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 Java di App Engine utilizzando Maven. Puoi trovare questi file nelle seguenti posizioni:
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 cambiare il livello di log predefinito per tutti i corsi nella 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 messaggi di log utilizzando l'API java.util.logging.Logger. Nell'esempio seguente viene scritto un messaggio di log informazioni:
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 dei log nella console Google Cloud
Guarda il seguente URL di esempio per un esempio del formato dell'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 da app in esecuzione nell'ambiente standard, utilizza Esplora log.
Un tipico log 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 delle richieste
La seguente tabella elenca i campi in ordine di occorrenza insieme a una descrizione:
Ordine campi | Nome campo | Presentare sempre? | Descrizione |
---|---|---|---|
1 | Indirizzo client | Sì | Indirizzo IP client. Esempio: 192.0.2.0 |
2 | Identità RFC 1413 | No | Identità client RFC 1413. Questo è quasi sempre il carattere - |
3 | Utente | No | Presentare solo se l'app utilizza l'API Users e l'utente ha eseguito l'accesso. Questo valore è la parte del "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 | Stringa di query 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 | Dimensioni risposta | Sì | Dimensioni della risposta in byte. Esempio: 414 |
8 | Percorso del referrer | No | Se non è presente alcun referrer, il log non contiene alcun percorso, ma solo - . Esempio di percorso del referrer: "http://www.example.com/index.html" . |
9 | User-agent | Sì | Identifica il browser e il sistema operativo sul 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 | Orologio da parete | Sì | Tempo totale di clock in millisecondi trascorso da App Engine alla 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 | Sì | Millisecondi di CPU necessari per soddisfare la richiesta. Si tratta del numero di millisecondi spesi dalla CPU per eseguire effettivamente il codice dell'applicazione, espresso in termini di CPU Intel x86 da 1,2 GHz di base. Se la CPU effettivamente utilizzata è più veloce della base di riferimento, i millisecondi CPU possono essere maggiori del tempo di clock effettivo definito in precedenza. Esempio: cpu_ms=42 |
13 | Codice di uscita | No | Presente solo se l'istanza si arresta dopo aver ricevuto la richiesta. Nel formato exit_code=XXX , dove XXX è un numero di 3 cifre corrispondente al motivo per cui l'istanza è stata arrestata. I codici di uscita non sono documentati poiché sono pensati principalmente per aiutare Google a individuare e risolvere i problemi. |
14 | Costo stimato | Sì | OBSOLETO. Costo stimato di 1000 richieste come questa, in USD. Esempio: cpm_usd=0.000046 |
15 | Nome coda | No | Il nome della coda di attività utilizzata. Presente solo se la richiesta utilizzava 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 | In attesa di coda | No | Presente solo se una richiesta è rimasta in una coda in attesa per un po' di tempo. Se nei log sono presenti molti di questi valori e/o i valori sono elevati, è possibile che siano necessarie più istanze per gestire il traffico. Esempio: pending_ms=195 |
18 | Caricamento richiesta in corso... | No | Presente solo se la richiesta è una richiesta di caricamento. Ciò significa che è stato necessario avviare un'istanza. Idealmente, le tue istanze dovrebbero essere attive e integre il più a lungo possibile, rispondendo a un gran numero di richieste prima di essere riciclate e di dover essere riavviate. Il che significa che non dovresti vederne troppi nei tuoi log. Esempio: loading_request=1 . |
19 | Istanza | Sì | Identificatore univoco dell'istanza che gestisce la richiesta. Esempio: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d |
20 | Versione | Sì | La versione attuale della release di App Engine utilizzata nell'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 API Logs sono gratuiti. I dati che superano i 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 logging, consulta i 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.