

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration des propriétés Apache Log4j2 pour Amazon EMR Serverless
<a name="log4j2"></a>

Cette page décrit comment configurer les propriétés personnalisées d'[Apache Log4j 2.x pour les tâches](https://logging.apache.org/log4j/2.x/) EMR sans serveur sur. `StartJobRun` Si vous souhaitez configurer les classifications Log4j au niveau de l'application, reportez-vous à. [Configuration d'application par défaut pour EMR Serverless](default-configs.md)

## Configuration des propriétés de Spark Log4j2 pour Amazon EMR Serverless
<a name="log4j2-spark"></a>

Avec les versions 6.8.0 et supérieures d'Amazon EMR, vous pouvez personnaliser les propriétés d'[Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) pour spécifier des configurations de journal précises. Cela simplifie le dépannage de vos tâches Spark sur EMR Serverless. Pour configurer ces propriétés, utilisez les `spark-executor-log4j2` classifications `spark-driver-log4j2` et.

**Topics**
+ [Classifications Log4j2 pour Spark](#log4j2-spark-class)
+ [Exemple de configuration Log4j2 pour Spark](#log4j2-spark-example)
+ [Log4j2 dans les exemples de tâches Spark](#log4j2-spark-jobs)
+ [Considérations relatives à Log4j2 pour Spark](#log4j2-spark-considerations)

### Classifications Log4j2 pour Spark
<a name="log4j2-spark-class"></a>

Pour personnaliser les configurations du journal Spark, utilisez les classifications suivantes avec [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration). Pour configurer les propriétés de Log4j 2.x, utilisez ce qui suit. [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-properties](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-properties)

**`spark-driver-log4j2`**  
Cette classification définit les valeurs du `log4j2.properties` fichier pour le pilote.

**`spark-executor-log4j2`**  
Cette classification définit les valeurs du `log4j2.properties` fichier pour l'exécuteur.

### Exemple de configuration Log4j2 pour Spark
<a name="log4j2-spark-example"></a>

L'exemple suivant montre comment soumettre une tâche Spark pour personnaliser les `applicationConfiguration` configurations Log4j2 pour le pilote et l'exécuteur Spark.

Pour configurer les classifications Log4j au niveau de l'application plutôt que lorsque vous soumettez le travail, reportez-vous à. [Configuration d'application par défaut pour EMR Serverless](default-configs.md)

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar",
            "entryPointArguments": ["1"],
            "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
        }
    }'
    --configuration-overrides '{
        "applicationConfiguration": [
             {
                "classification": "spark-driver-log4j2",
                "properties": {
                    "rootLogger.level":"error", // will only display Spark error logs
                    "logger.IdentifierForClass.name": "classpath for setting logger",
                    "logger.IdentifierForClass.level": "info"
                   
                }
            },
            {
                "classification": "spark-executor-log4j2",
                "properties": {
                    "rootLogger.level":"error", // will only display Spark error logs
                    "logger.IdentifierForClass.name": "classpath for setting logger",
                    "logger.IdentifierForClass.level": "info"
                }
            }
       ]
    }'
```

### Log4j2 dans les exemples de tâches Spark
<a name="log4j2-spark-jobs"></a>

Les exemples de code suivants montrent comment créer une application Spark pendant que vous initialisez une configuration Log4j2 personnalisée pour l'application.

------
#### [ Python ]

**Example - Utiliser Log4j2 pour une tâche Spark avec Python**  

```
import os
import sys

from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession

app_name = "PySparkApp"
if __name__ == "__main__":
    spark = SparkSession\
        .builder\
        .appName(app_name)\
        .getOrCreate()
    
    spark.sparkContext._conf.getAll()
    sc = spark.sparkContext
    log4jLogger = sc._jvm.org.apache.log4j
    LOGGER = log4jLogger.LogManager.getLogger(app_name)

    LOGGER.info("pyspark script logger info")
    LOGGER.warn("pyspark script logger warn")
    LOGGER.error("pyspark script logger error")
    
    // your code here
    
    spark.stop()
```
Pour personnaliser Log4j2 pour le pilote lorsque vous exécutez une tâche Spark, utilisez la configuration suivante :  

```
{
   "classification": "spark-driver-log4j2",
      "properties": {
          "rootLogger.level":"error", // only display Spark error logs
          "logger.PySparkApp.level": "info", 
          "logger.PySparkApp.name": "PySparkApp"
      }
}
```

------
#### [ Scala ]

**Example - Utilisation de Log4j2 pour une tâche Spark avec Scala**  

```
import org.apache.log4j.Logger
import org.apache.spark.sql.SparkSession

object ExampleClass {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
    .builder
    .appName(this.getClass.getName)
    .getOrCreate()

    val logger = Logger.getLogger(this.getClass);
    logger.info("script logging info logs")
    logger.warn("script logging warn logs")
    logger.error("script logging error logs")

// your code here
    spark.stop()
  }
}
```
Pour personnaliser Log4j2 pour le pilote lorsque vous exécutez une tâche Spark, utilisez la configuration suivante :  

```
{
   "classification": "spark-driver-log4j2",
      "properties": {
          "rootLogger.level":"error", // only display Spark error logs
          "logger.ExampleClass.level": "info", 
          "logger.ExampleClass.name": "ExampleClass"
      }
}
```

------

### Considérations relatives à Log4j2 pour Spark
<a name="log4j2-spark-considerations"></a>

Les propriétés Log4j2.x suivantes ne sont pas configurables pour les processus Spark :
+ `rootLogger.appenderRef.stdout.ref`
+ `appender.console.type`
+ `appender.console.name`
+ `appender.console.target`
+ `appender.console.layout.type`
+ `appender.console.layout.pattern`

[Pour des informations détaillées sur les propriétés de Log4j2.x configurables, reportez-vous au fichier sur. `log4j2.properties.template`](https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template) GitHub