

# Configuración de los formatos de registro JSON y de texto sin formato
<a name="monitoring-cloudwatchlogs-logformat"></a>

Al capturar las salidas del registro como pares clave-valor JSON, resulta más fácil buscar y filtrar resultados cuando se depuran las funciones. Con los registros con formato JSON, también puede agregar etiquetas e información contextual a sus registros. Esto puede ayudarlo a realizar un análisis automatizado de grandes volúmenes de datos de registro. A menos que su flujo de trabajo de desarrollo se base en herramientas existentes que consumen registros de Lambda con texto sin formato, le recomendamos que seleccione JSON como formato de registro.

**Instancias administradas de Lambda**  
Las instancias administradas de Lambda solo admiten el formato de registro JSON. Cuando crea una función de instancias administradas, Lambda configura automáticamente el formato de registro en JSON y no se puede cambiar a texto sin formato. Para obtener más información acerca de las instancias administradas, consulte [Instancias administradas de Lambda](lambda-managed-instances.md).

Para todos los tiempos de ejecución administrados por Lambda, puede elegir si los registros del sistema de su función se deben enviar a Registros de Amazon CloudWatch en texto sin formato o formato JSON no estructurado. Los registros del sistema son los registros que Lambda genera y, a veces, se conocen como registros de eventos de plataforma.

En el caso de los [tiempos de ejecución compatibles](#monitoring-cloudwatchlogs-logformat-supported), cuando se utiliza uno de los métodos de registro integrados compatibles, Lambda también puede generar los registros de aplicación de la función (los registros que genera el código de la función) en formato JSON estructurado. Al configurar el formato de registro de la función para estos tiempos de ejecución, la configuración que elija se aplicará tanto a los registros del sistema como de la aplicación.

Para los tiempos de ejecución compatibles, si su función utiliza una biblioteca o un método de registro compatibles, no necesita realizar ningún cambio en el código existente para que Lambda capture los registros en formato JSON estructurado.

**nota**  
El uso del formato de registro JSON agrega metadatos y codifica los mensajes de registro como objetos JSON que contienen una serie de pares clave-valor. Por este motivo, es posible que aumente el tamaño de los mensajes de registro de la función.

## Tiempos de ejecución y métodos de registro compatibles
<a name="monitoring-cloudwatchlogs-logformat-supported"></a>

 Actualmente, Lambda admite la opción de generar registros de aplicaciones en formato JSON estructurado para los siguientes tiempos de ejecución. 


| Idioma | Versiones compatibles | 
| --- | --- | 
| Java | Todos los tiempos de ejecución de Java excepto Java 8 en Amazon Linux 1 | 
| .NET | .NET 8 y versiones posteriores | 
| Node.js | Node.js 16 y posteriores | 
| Python | Python 3.8 y posteriores | 
| Rust | n/a | 

Para que Lambda envíe los registros de aplicación de la función a CloudWatch en formato JSON estructurado, la función debe utilizar las siguientes herramientas de registro integradas para generar los registros:
+ **Java**: el registrador `LambdaLogger` o Log4j2. Para obtener más información, consulte [Registro y supervisión de las funciones de Lambda de Java](java-logging.md).
+ **.NET**: la instancia `ILambdaLogger` del objeto de contexto. Para obtener más información, consulte [Registro y supervisión de las funciones de Lambda de C\$1](csharp-logging.md).
+ **Node.js**: los métodos de la consola `console.trace`, `console.debug`, `console.log`, `console.info`, `console.error` y `console.warn`. Para obtener más información, consulte [Registro y supervisión de las funciones de Lambda de Node.js](nodejs-logging.md).
+ **Python**: la biblioteca `logging` de Python estándar. Para obtener más información, consulte [Registro y supervisión de las funciones de Lambda de Python](python-logging.md).
+ **Rust**: la caja de `tracing`. Para obtener más información, consulte [Registro y supervisioón de las funciones de Lambda en Rust](rust-logging.md).

Para otros tiempos de ejecución de Lambda administrados, Lambda actualmente solo admite de forma nativa la captura de registros del sistema en formato JSON estructurado. Sin embargo, puede seguir capturando los registros de aplicaciones en formato JSON estructurado en cualquier tiempo de ejecución con herramientas de registro, como Powertools para AWS Lambda, que generan salidas de registro con formato JSON.

## Formatos de registro predeterminados
<a name="monitoring-cloudwatchlogs-format-default"></a>

Actualmente, el formato de registro predeterminado para todos los tiempos de ejecución de Lambda es texto sin formato. En el caso de las instancias administradas de Lambda, el formato de registro es siempre JSON y no se puede cambiar.

Si ya utiliza bibliotecas de registro, como Powertools para AWS Lambda, para generar los registros de funciones en formato JSON estructurado, no necesita cambiar el código si selecciona el formato de registro JSON. Lambda no codifica dos veces ningún registro que ya esté codificado en JSON, por lo que los registros de la aplicación de su función seguirán capturándose como antes.

## Formato JSON para registros del sistema
<a name="monitoring-cloudwatchlogs-JSON-system"></a>

Al configurar el formato de registro de la función como JSON, se captura cada elemento de registro del sistema (evento de plataforma) como un objeto JSON que contiene pares clave-valor con las siguientes claves:
+ `"time"`: la hora en que se generó el mensaje de registro
+ `"type"`: el tipo de evento que se está registrando
+ `"record"`: el contenido de la salida del registro

El formato del valor `"record"` varía según el tipo de evento que se registre. Para obtener más información consulte () [Tipos de objetos `Event` de la API de telemetría](telemetry-schema-reference.md#telemetry-api-events). Para obtener más información sobre los niveles de registro asignados a los eventos de registro del sistema, consulte [Asignación de eventos a nivel de registro del sistema](monitoring-cloudwatchlogs-log-level.md#monitoring-cloudwatchlogs-log-level-mapping).

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato. Tenga en cuenta que, en la mayoría de los casos, los eventos de registro del sistema contienen más información cuando se generan con formato JSON que cuando se generan con texto sin formato.

**Example Texto sin formato:**  

```
2024-03-13 18:56:24.046000 fbe8c1   INIT_START  Runtime Version: python:3.12.v18  Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
```

**Example JSON estructurado:**  

```
{
  "time": "2024-03-13T18:56:24.046Z",
  "type": "platform.initStart",
  "record": {
    "initializationType": "on-demand",
    "phase": "init",
    "runtimeVersion": "python:3.12.v18",
    "runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0"
  }
}
```

**nota**  
La [Acceso a datos de telemetría en tiempo real para extensiones mediante la API de telemetría](telemetry-api.md) siempre emite eventos de plataforma, como `START` y `REPORT`, en formato JSON. La configuración del formato de los registros del sistema que Lambda envía a CloudWatch no afecta el comportamiento de la API de telemetría de Lambda.

## Formato JSON para registros de aplicaciones
<a name="monitoring-cloudwatchlogs-JSON-application"></a>

Al configurar el formato de registro de la función como JSON, las salidas del registro de aplicación escritas con las bibliotecas y los métodos de registro compatibles se capturan como un objeto JSON que contiene pares de clave-valor con las siguientes claves:
+ `"timestamp"`: la hora en que se generó el mensaje de registro
+ `"level"`: el nivel de registro asignado al mensaje
+ `"message"`: el contenido del mensaje de registro
+ `"requestId"` (Python, .NET y Node.js) o `"AWSrequestId"` (Java): el ID de solicitud único para la invocación de la función

Según el tiempo de ejecución y el método de registro que utilice la función, este objeto JSON también puede contener pares de claves adicionales. Por ejemplo, en Node.js, si la función utiliza métodos `console` para registrar objetos de error con varios argumentos, el objeto JSON contendrá pares de clave-valor adicionales junto con las claves `errorMessage`, `errorType`, y`stackTrace`. Para obtener más información sobre los registros con formato JSON en diferentes tiempos de ejecución de Lambda, consulte [Registro y supervisión de las funciones de Lambda de Python](python-logging.md), [Registro y supervisión de las funciones de Lambda de Node.js](nodejs-logging.md), y [Registro y supervisión de las funciones de Lambda de Java](java-logging.md).

**nota**  
La clave que Lambda utiliza para el valor de marca de tiempo es diferente para los registros del sistema y los registros de la aplicación. En el caso de los registros del sistema, Lambda usa la clave `"time"` para mantener la coherencia con la API de telemetría. Para los registros de la aplicación, Lambda sigue las convenciones de los tiempos de ejecución compatibles y utiliza `"timestamp"`.

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato.

**Example Texto sin formato:**  

```
2024-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
```

**Example JSON estructurado:**  

```
{
    "timestamp":"2024-10-27T19:17:45.586Z",
    "level":"INFO",
    "message":"some log message",
    "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189"
}
```

## Configuración del formato de registro de su función
<a name="monitoring-cloudwatchlogs-set-format"></a>

Para configurar el formato de registro de la función, puede utilizar la consola de Lambda o la AWS Command Line Interface (AWS CLI). También puede configurar el formato de registro de una función mediante los comandos de la API de Lambda [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) y [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html), el recurso de AWS Serverless Application Model (AWS SAM) [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) y el recurso de CloudFormation [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html).

Cambiar el formato de registro de la función no afecta a los registros existentes almacenados en Registros de Amazon CloudWatch. Solo los registros nuevos utilizarán el formato actualizado.

Si cambia el formato de registro de la función a JSON y no establece el nivel de registro, Lambda establece automáticamente el nivel de registro de la aplicación y el nivel de registro del sistema de la función en INFO. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel INFO e inferiores. Para obtener más información sobre el filtrado a nivel de registro de aplicaciones y sistemas, consulte [Filtrado a nivel de registro](monitoring-cloudwatchlogs-log-level.md). 

**nota**  
Para los tiempos de ejecución de Python, cuando el formato de registro de la función está establecido en texto sin formato, la configuración de nivel de registro predeterminada es WARN. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel WARN e inferiores. Al cambiar el formato de registro de la función a JSON, se modifica este comportamiento predeterminado. Para obtener más información acerca de los registros de Python, consulte [Registro y supervisión de las funciones de Lambda de Python](python-logging.md).

En el caso de las funciones de Node.js que emiten registros en formato de métricas integradas (EMF), cambiar el formato de registro de la función a JSON podría provocar que CloudWatch no reconozca las métricas.

**importante**  
Si su función utiliza Powertools para AWS Lambda (TypeScript) o las bibliotecas cliente de EMF de código abierto para emitir registros EMF, actualice las bibliotecas de [Powertools](https://github.com/aws-powertools/powertools-lambda-typescript) y [EMF](https://www.npmjs.com/package/aws-embedded-metrics) a las versiones más recientes para asegurarse de que CloudWatch pueda seguir analizando los registros correctamente. Si cambia al formato de registro JSON, también le recomendamos que realice pruebas para asegurarse de que es compatible con las métricas integradas de la función. Para obtener más información sobre las funciones de node.js que emiten registros EMF, consulte [Uso de bibliotecas cliente de formato de métricas integradas (EMF) con registros JSON estructurados](nodejs-logging.md#nodejs-logging-advanced-emf).

**Para configurar el formato de registro de una función (consola)**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija una función.

1. En la página de configuración de funciones, elija **Herramientas de supervisión y operaciones**.

1. En el panel **Configuración de registros**, seleccione **Editar**.

1. En **Contenido del registro**, para **Formato de registro**, seleccione **Texto** o **JSON**.

1. Seleccione **Save**.

**Cambio del formato de registro de una función existente (AWS CLI)**
+ Para cambiar el formato de registro de una función existente, utilice el comando [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html). Configure la opción `LogFormat` en `LoggingConfig` para que sea `JSON` o `Text`.

  ```
  aws lambda update-function-configuration \
    --function-name myFunction \
    --logging-config LogFormat=JSON
  ```

**Para establecer el formato de registro al crear una función (AWS CLI)**
+ Para configurar el formato de registro al crear una función nueva, utilice la opción `--logging-config` en el comando [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html). Establezca `LogFormat` en `JSON` o `Text`. El siguiente comando de ejemplo crea una función de Node.js que genera registros en formato JSON estructurado.

  Si no especifica un formato de registro al crear una función, Lambda utilizará el formato de registro predeterminado para la versión de tiempo de ejecución que seleccione. Para obtener información sobre los formatos de registro predeterminados, consulte [Formatos de registro predeterminados](#monitoring-cloudwatchlogs-format-default).

  ```
  aws lambda create-function \ 
    --function-name myFunction \ 
    --runtime nodejs24.x \
    --handler index.handler \
    --zip-file fileb://function.zip \
    --role arn:aws:iam::123456789012:role/LambdaRole \
    --logging-config LogFormat=JSON
  ```