Configurazione di Cloud Logging per Java

Puoi scrivere log in Cloud Logging dalle applicazioni Java utilizzando l'appender Logback o un gestore java.util.logging oppure utilizzando direttamente la libreria Cloud Logging per Java.

L'agente Cloud Logging non deve essere installato per utilizzare la libreria Cloud Logging per Java.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Logging API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Logging API.

    Enable the API

  8. Accodatore Logback per Cloud Logging

    Utilizzando l'appender Logback, puoi utilizzare Cloud Logging con il facade di logging SLF4J.

    Installazione della dipendenza

    If you are using Maven, add the following to your pom.xml file. For more information about BOMs, see The Google Cloud Platform Libraries BOM.

    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-logging-logback</artifactId>
      <version>0.131.11-alpha</version>
    </dependency>

    If you are using Gradle, add the following to your dependencies:

    implementation 'com.google.cloud:google-cloud-logging-logback:0.131.11-alpha'

    If you are using sbt, add the following to your dependencies:

    libraryDependencies += "com.google.cloud" % "google-cloud-logging-logback" % "0.131.11-alpha"

    Configurazione Logback

    Logback può essere configurato in modo programmatico o utilizzando uno script espresso in XML o Groovy.

    Puoi personalizzare la soglia di gravità minima, il nome del log o fornire miglioramenti aggiuntivi. Di seguito è riportata una configurazione Logback di esempio in formato XML:

    <configuration>
      <appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
        <!-- Optional : filter logs at or above a level -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
          <level>INFO</level>
        </filter>
        <log>application.log</log> <!-- Optional : default java.log -->
        <resourceType>gae_app</resourceType> <!-- Optional : default: auto-detected, fallback: global -->
        <enhancer>com.example.logging.logback.enhancers.ExampleEnhancer</enhancer> <!-- Optional -->
        <flushLevel>WARN</flushLevel> <!-- Optional : default ERROR -->
      </appender>
    
      <root level="info">
        <appender-ref ref="CLOUD" />
      </root>
    </configuration>

    Esempio

    Dopo aver configurato Logback per utilizzare l'appender Logback di Cloud Logging, ora puoi reindirizzare i log utilizzando l'API Logging SLF4J. Fornisci la Google Cloud configurazione se prevedi di eseguire l'esempio localmente o al di fuori di Google Cloud. Questo snippet mostra come registrare i log utilizzando il facade SLF4J all'interno dell'applicazione:

    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class Quickstart {
      private static final Logger logger = LoggerFactory.getLogger(Quickstart.class);
    
      public static void main(String[] args) {
        logger.info("Logging INFO with Logback");
        logger.error("Logging ERROR with Logback");
      }
    }

    Gestore java.util.logging

    Puoi anche utilizzare l'API Cloud Logging utilizzando un gestore API Java Logging predefinito.

    Installazione della dipendenza

    If you are using Maven with a BOM, add the following to your pom.xml file:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.55.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-logging</artifactId>
      </dependency>
    
      <!-- ...
    </dependencies>

    If you are using Maven without a BOM, add this to your dependencies:

    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-logging</artifactId>
      <version>3.21.3</version>
    </dependency>

    If you are using Gradle, add the following to your dependencies:

    implementation platform('com.google.cloud:libraries-bom:26.61.0')
    
    implementation 'com.google.cloud:google-cloud-logging'

    If you are using sbt, add the following to your dependencies:

    libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "3.22.6"

    If you're using Visual Studio Code, IntelliJ, or Eclipse, you can add client libraries to your project using the following IDE plugins:

    The plugins provide additional functionality, such as key management for service accounts. Refer to each plugin's documentation for details.

    Configurazione di java.util.logging

    I gestori di logging possono essere aggiunti in modo programmatico o utilizzando un file di configurazione. Il percorso del file di configurazione deve essere fornito all'applicazione come proprietà di sistema: -Djava.util.logging.config.file=/path/to/logging.properties

    Ecco un esempio di file di configurazione:

    # To use this configuration, add to system properties : -Djava.util.logging.config.file="/path/to/file"
    #
    .level = INFO
    
    # it is recommended that io.grpc and sun.net logging level is kept at INFO level,
    # as both these packages are used by Cloud internals and can result in verbose / initialization problems.
    io.grpc.netty.level=INFO
    sun.net.level=INFO
    
    com.example.logging.jul.Quickstart.handlers=com.google.cloud.logging.LoggingHandler
    # default : java.log
    com.google.cloud.logging.LoggingHandler.log=custom_log
    
    # default : INFO
    com.google.cloud.logging.LoggingHandler.level=FINE
    
    # default : ERROR
    com.google.cloud.logging.LoggingHandler.flushLevel=ERROR
    
    # default : auto-detected, fallback "global"
    com.google.cloud.logging.LoggingHandler.resourceType=container
    
    # custom formatter
    com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
    java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
    
    #optional enhancers (to add additional fields, labels)
    com.google.cloud.logging.LoggingHandler.enhancers=com.example.logging.jul.enhancers.ExampleEnhancer

    Esempio

    Fornisci la Google Cloud configurazione se prevedi di eseguire l'esempio localmente o al di fuori di Google Cloud. Questo snippet mostra come registrare i log utilizzando java.util.logging:

    
    import java.util.logging.Logger;
    
    public class Quickstart {
      private static final Logger logger = Logger.getLogger(Quickstart.class.getName());
    
      public static void main(String[] args) {
        logger.info("Logging INFO with java.util.logging");
        logger.severe("Logging ERROR with java.util.logging");
      }
    }

    Configurazione comune

    Le sezioni seguenti riguardano la configurazione comune al gestore java.util.logging e all'appender Logback per Cloud Logging.

    Predefiniti

    L'appender Logback e il gestore java.util.logging utilizzano le seguenti impostazioni predefinite per creare un'istanza di un client Cloud Logging:

    • Nome log : java.log

    • Soglia minima per il log : INFO

    • Gravità dello scarico : ERROR

    La libreria Cloud Logging per Java raggruppa i messaggi in batch in base alle dimensioni e al tempo trascorso dall'ultima scrittura. I batch con richieste di logging con gravità di scaricamento o superiore vengono scritti immediatamente.

    Rilevamento delle risorse monitorate

    Tutti i log inviati tramite le librerie Cloud Logging richiedono un tipo di risorsa monitorata per identificare la tua applicazione.

    L'aggiunta Logback e il gestore java.util.logging forniscono il rilevamento automatico del tipo di risorsa delle applicazioni App Engine, Compute Engine e Google Kubernetes Engine.

    Una risorsa monitorata global viene utilizzata come predefinita in altri ambienti.

    Puoi eseguire l'override del tipo di risorsa monitorata con un tipo valido nella configurazione dell'appender Logback o nella configurazione del gestore java.util.logging.

    Campi ed etichette aggiuntivi

    Utilizzando l'appender Logback e il gestore java.util.logging, puoi aggiungere o aggiornare i campi di un oggetto LogEntry utilizzando un'istanza di LoggingEnhancer.

    Gli strumenti di miglioramento devono essere configurati come mostrato nella configurazione dell'appender Logback o nella configurazione del gestore java.util.logging:

    
    import com.google.cloud.logging.LogEntry;
    import com.google.cloud.logging.LoggingEnhancer;
    
    // Add / update additional fields to the log entry
    public class ExampleEnhancer implements LoggingEnhancer {
    
      @Override
      public void enhanceLogEntry(LogEntry.Builder logEntry) {
        // add additional labels
        logEntry.addLabel("test-label-1", "test-value-1");
      }
    }

    L'utilizzo di etichette personalizzate potrebbe non essere supportato per la tua configurazione. Ad esempio, i log Dataflow non includono queste etichette.

    Per saperne di più sull'installazione, consulta la documentazione della libreria Cloud Logging per Java. Puoi anche segnalare i problemi utilizzando il tracker dei problemi.

    Scrivere log con la libreria client di Cloud Logging

    Per informazioni sull'utilizzo diretto della libreria client di Cloud Logging per Java, consulta Librerie client di Cloud Logging.

    Esegui il giorno Google Cloud

    Affinché un'applicazione possa scrivere log utilizzando la libreria Cloud Logging per Java, l'account di servizio per la risorsa sottostante deve disporre del ruolo Logs Writer (roles/logging.logWriter) IAM. La maggior parte degli ambienti Google Cloud configura automaticamente l'account di servizio predefinito in modo che disponga di questo ruolo.

    App Engine

    Cloud Logging è abilitato automaticamente per App Engine e l'account di servizio predefinito della tua app dispone delle autorizzazioni IAM per scrivere voci di log per impostazione predefinita.

    L'ambiente standard App Engine, per impostazione predefinita, utilizza l'API java.util.logging.Logger; questa scrive direttamente in Cloud Logging ed è facile da configurare.

    Per ulteriori dettagli, consulta la documentazione di App Engine su Lettura e scrittura dei log delle applicazioni.

    Ambiente flessibile di App Engine

    Nell'ambiente flessibile di App Engine, java.util.logging utilizza ConsoleHandler per impostazione predefinita e invia i log a stdout e stderr.

    Il runtime Jetty è incluso nella libreria Cloud Logging per Java.

    Il gestore java.util.logging può essere utilizzato per registrare direttamente in Cloud Logging fornendo logging.properties in app.yaml come mostrato qui:

        env_variables:
          JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
    

    La registrazione dell'ID traccia è disponibile nei runtime Jetty se utilizzi il gestore java.util.logging o l'appender Logback.

    Quando viene eseguita nell'ambiente flessibile di App Engine, un'istanza di TraceLoggingEnhancer aggiunge un ID traccia thread-safe a ogni voce di log utilizzando l'etichetta trace_id.

    Google Kubernetes Engine (GKE)

    GKE concede automaticamente al account di servizio predefinito il ruolo IAM Logs Writer (roles/logging.logWriter). Se utilizzi la federazione delle identità per i carichi di lavoro per GKE con questo account di servizio predefinito per consentire ai carichi di lavoro di accedere ad API Google Cloud specifiche, non è necessaria alcuna configurazione aggiuntiva. Tuttavia, se utilizzi la federazione delle identità per i carichi di lavoro per GKE con un account di servizio IAM personalizzato, assicurati che quest'ultimo disponga del ruolo Writer log (roles/logging.logWriter).

    Se necessario, puoi anche utilizzare il seguente comando per aggiungere l'ambito di accesso logging.write durante la creazione del cluster:

    gcloud container clusters create example-cluster-name \
        --scopes https://www.googleapis.com/auth/logging.write
    

    Compute Engine

    Quando utilizzi le istanze VM di Compute Engine, aggiungi l'ambito di accesso cloud-platform a ogni istanza. Quando crei una nuova istanza tramite la consoleGoogle Cloud , puoi farlo nella sezione Identità e accesso API del riquadro Crea istanza. Utilizza il service account predefinito di Compute Engine o un altro account di servizio a tua scelta e seleziona Consenti l'accesso completo a tutte le API Cloud nella sezione Identità e accesso API. Qualunque service account tu scelga, assicurati che gli sia stato concesso il ruolo Logs Writer nella sezione IAM e amministrazione della consoleGoogle Cloud .

    Esegui localmente e altrove

    Per utilizzare la libreria Cloud Logging per Java al di fuori di Google Cloud, inclusa l'esecuzione della libreria sulla tua workstation, sui computer del tuo data center o sulle istanze VM di un altro provider cloud, devi configurare le Credenziali predefinite dell'applicazione (ADC) nel tuo ambiente locale per l'autenticazione alla libreria Cloud Logging per Java.

    Per saperne di più, vedi Configurare ADC per on-premise o un altro provider cloud.

    Visualizzare i log

    Nella Google Cloud console, vai alla pagina Esplora log:

    Vai a Esplora log

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

    In Esplora log devi specificare una o più risorse, ma la selezione delle risorse potrebbe non essere ovvia. Ecco alcuni suggerimenti per iniziare:

    • Se esegui il deployment dell'applicazione in App Engine o utilizzi le librerie specifiche di App Engine, imposta la risorsa su Applicazione GAE.

    • Se esegui il deployment dell'applicazione su Compute Engine, imposta la risorsa su Istanza VM GCE.

    • Se esegui il deployment dell'applicazione su Google Kubernetes Engine, la configurazione di logging del cluster determina il tipo di risorsa delle voci di log. Per una discussione dettagliata sulle soluzioni Legacy Google Cloud Observability e Google Cloud Observability Kubernetes Monitoring e su come queste opzioni influiscono sul tipo di risorsa, consulta Migrazione a Google Cloud Observability Kubernetes Monitoring.

    • Se la tua applicazione utilizza direttamente l'API Cloud Logging, la risorsa dipende dall'API e dalla tua configurazione. Ad esempio, nella tua applicazione puoi specificare una risorsa o utilizzarne una predefinita.

    • Se non vedi alcun log in Esplora log, per visualizzare tutte le voci di log, passa alla modalità di query avanzata e utilizza una query vuota.

      1. Per passare alla modalità di query avanzata, fai clic sul menu (&blacktriangledown;) nella parte superiore di Esplora log e poi seleziona Converti in filtro avanzato.
      2. Cancella i contenuti visualizzati nella casella del filtro.
      3. Fai clic su Invia filtro.

      Puoi esaminare le singole voci per identificare le tue risorse.

    Per ulteriori informazioni, consulta la sezione Utilizzare Esplora log.