Configura Stackdriver Logging para Java

Puedes escribir registros en Stackdriver Logging desde aplicaciones Java con el adjuntador de Logback o un controlador java.util.logging, o directamente mediante la biblioteca de Stackdriver Logging para Java.

No hace falta que el agente de Stackdriver Logging esté instalado a fin de usar la biblioteca de Stackdriver Logging para Java.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  3. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

  4. Habilita las Stackdriver Logging API necesarias.

    Habilita las API

Adjuntador de Logback para Stackdriver Logging

Mediante el adjuntador de Logback, puedes usar Stackdriver Logging con la fachada de registro SLF4J.

Instala la dependencia

Si usas Maven, agrega lo siguiente a tu archivo pom.xml:
<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-logging-logback</artifactId>
  <version>0.79.0-alpha</version>
</dependency>
Si usas Gradle, agrega lo siguiente a tus dependencias:
compile 'com.google.cloud:google-cloud-logging-logback:0.79.0-alpha'
Si usas SBT, agrega lo siguiente a tus dependencias:
libraryDependencies += "com.google.cloud" % "google-cloud-logging-logback" % "0.79.0-alpha"

Configuración de Logback

Logback se puede configurar de manera programática o con una secuencia de comandos expresada en XML o Groovy.

Puedes personalizar el umbral de gravedad mínimo y el nombre de registro o proporcionar mejoras adicionales. Este es un ejemplo de configuración de Logback en 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>

Ejemplo

Una vez que configuras Logback para que use el adjuntador de Logback de Stackdriver Logging, puedes redireccionar los registros con la API de registro SLF4J. En este fragmento de código, se muestra cómo realizar registros con la fachada SLF4J en tu aplicación:

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");
  }
}

El controlador java.util.logging

También puedes usar la API de Stackdriver Logging con un controlador predeterminado de la API de Logging para Java.

Instala la dependencia

Si usas Maven, agrega lo siguiente a tu archivo pom.xml:
<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-logging</artifactId>
  <version>1.61.0</version>
</dependency>
Si usas Gradle, agrega lo siguiente a tus dependencias:
compile 'com.google.cloud:google-cloud-logging:1.61.0'
Si usas SBT, agrega lo siguiente a tus dependencias:
libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "1.61.0"

Si usas IntelliJ o Eclipse, puedes agregar bibliotecas cliente a tu proyecto mediante los siguientes complementos IDE:

Los complementos brindan funcionalidades adicionales, como administración de claves para las cuentas de servicio. Consulta la documentación de cada complemento para obtener más detalles.

Configuración de java.util.logging

Los controladores de Logging se pueden agregar de manera programática o mediante un archivo de configuración. La ruta de acceso al archivo de configuración debe proporcionarse a tu aplicación como una propiedad del sistema: -Djava.util.logging.config.file=/path/to/logging.properties

Aquí hay un ejemplo de un archivo de configuración:

# 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 Stackdriver 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

Ejemplo

En este fragmento, se muestra cómo realizar registros con 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");
  }
}

Configuración común

En las siguientes secciones, se abarca la configuración que es común al controlador java.util.logging y el adjuntador Logback para Stackdriver Logging.

Valores predeterminados

El adjuntador Logback y el controlador java.util.logging usan los siguientes valores predeterminados para crear una instancia de un cliente de Stackdriver Logging:

  • Nombre de registro: java.log

  • Umbral mínimo para registrar: INFO

  • Gravedad de limpieza: ERROR

La biblioteca de Stackdriver Logging para Java agrupa los mensajes en lotes por tamaño y tiempo desde la última escritura. Los lotes con solicitudes de registro que alcanzan o superan la gravedad de limpieza se escriben de inmediato.

Detección de recursos supervisados

Todos los registros enviados a través de las bibliotecas de Stackdriver Logging requieren un tipo de recurso supervisado para identificar tu aplicación.

El adjuntador Logback y el controlador java.util.logging proporcionan detección automática del tipo de recurso de tus aplicaciones de App Engine, Compute Engine y Google Kubernetes Engine.

Un recurso supervisado global se usa como predeterminado en otros entornos.

Puedes reemplazar el tipo de recurso supervisado por un tipo válido en la Configuración del adjuntador de Logback o la Configuración del controlador java.util.logging.

Campos y etiquetas adicionales

Con el adjuntador Logback y el controlador java.util.logging puedes agregar o actualizar campos en un objeto LogEntry con una instancia de LoggingEnhancer.

Las mejoras deben configurarse como se muestra en la configuración del adjuntador Logback o la configuración del controlador 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");
  }
}

Si deseas obtener más información sobre la instalación, consulta la documentación de la biblioteca de Stackdriver Logging para Java. También puedes informar sobre problemas con el seguimiento de problemas.

Usa la biblioteca cliente de Cloud directamente

Si deseas obtener información sobre el uso de la biblioteca cliente de Cloud en Stackdriver Logging para Java de forma directa, consulta Bibliotecas cliente de Stackdriver Logging.

Ejecuta en Google Cloud Platform

Usar la biblioteca de Stackdriver Logging para Java requiere la función de Escritor de registros de Cloud IAM en GCP. La mayoría de los entornos de GCP proporcionan esta función de forma predeterminada.

App Engine

App Engine otorga la función de Escritor de registros de forma predeterminada.

La biblioteca de Stackdriver Logging para Java se puede usar sin tener que proporcionar credenciales de forma explícita.

Stackdriver Logging se habilita de forma automática para las aplicaciones de App Engine. No se requiere ninguna configuración adicional.

El entorno estándar de App Engine usa la API de java.util.logging.Logger de forma predeterminada, que realiza operaciones de escritura en Stackdriver Logging de forma directa y es fácil de configurar.

Para obtener más información, consulta la documentación de App Engine sobre Lectura y escritura de registros de aplicaciones.

Entorno flexible de App Engine

En el entorno flexible de App Engine, java.util.logging usa ConsoleHandler de forma predeterminada y envía los registros a stdout y stderr.

En Entorno de ejecución Jetty se incluye con la biblioteca de Stackdriver Logging para Java.

El controlador java.util.logging se puede usar para realizar registros de forma directa en Stackdriver Logging si se proporciona logging.properties en tu archivo app.yaml, como se muestra a continuación:

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

El registro de ID de Trace está disponible en los entornos de ejecución de Jetty si usas el controlador java.util.logging o el adjuntador de Logback.

Cuando se ejecuta en el entorno flexible de App Engine, una instancia de TraceLoggingEnhancer agrega un ID de seguimiento de seguro para los subprocesos a todas las entradas de registro con la etiqueta trace_id.

Google Kubernetes Engine

En Google Kubernetes Engine, debes agregar el nivel de acceso logging.write cuando creas el clúster:

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

Compute Engine

Cuando uses las instancias de VM de Compute Engine, agrega el nivel de acceso cloud-platform a cada instancia. Cuando creas una instancia nueva mediante Google Cloud Platform Console, puedes hacer esto en la sección Identidad y acceso a la API del panel Crear instancia. Usa la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio diferente y selecciona Permitir acceso total a las API de Cloud en la sección Identidad y acceso a la API. Sin importar la cuenta de servicio que selecciones, asegúrate de que se le otorgue la función de Escritor de registros en la sección IAM y Administración de GCP Console.

Ejecuta de forma local y en otros lugares

Si deseas usar la biblioteca de Stackdriver Logging para Java fuera de GCP, debes suministrarle tu ID del proyecto de GCP y las credenciales correspondientes de tu cuenta de servicio directamente. Esto se aplica a la ejecución del agente en tu propia estación de trabajo, en las computadoras de tus centros de datos o en las instancias de VM de otro proveedor de servicios en la nube. Para obtener más información, consulta Obtén y proporciona credenciales de cuenta de servicio de forma manual.

Mira los registros

Después de la implementación, podrás ver los registros en el Visor de registros de GCP Console.

Ir al Visor de registros

Para obtener más información, consulta Visualiza los registros.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Stackdriver Logging
¿Necesitas ayuda? Visita nuestra página de asistencia.