I have the below Log4j2.properties
where I have configured JsonTemplateLayout as the log layout type ,
# See also: http://spark.apache.org/docs/2.0.2/running-on-yarn.html#debugging-your-application
log4j.rootLogger=WARN,ERROR,stdout,stderr
log4j.appender.stdout=org.apache.log4j.RollingFileAppender
log4j.appender.stdout.append=true
log4j.appender.stdout.file=${spark.yarn.app.container.log.dir}/stdout
log4j.appender.stdout.threshold=WARN
# log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.type = JsonTemplateLayout
log4j.appender.stdout.layout.eventTemplateUri = classpath:JsonTemplateLayout.json
log4j.appender.stdout.layout.locationInfoEnabled = true
#log4j.appender.stdout.layout.ConversionPattern=%d %p %c{1}:%L %m%n
log4j.appender.stdout.maxFileSize=50MB
log4j.appender.stdout.maxBackupIndex=10
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stderr=org.apache.log4j.RollingFileAppender
log4j.appender.stderr.file=${spark.yarn.app.container.log.dir}/stderr
log4j.appender.stderr.threshold=ERROR
# log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
#log4j.appender.stderr.layout.ConversionPattern=%d %p %c{1}:%L %m%n
log4j.appender.stderr.layout.type = JsonTemplateLayout
log4j.appender.stderr.layout.eventTemplateUri = classpath:Log4j2JsonEventTemplate.json
log4j.appender.stderr.layout.locationInfoEnabled = true
log4j.appender.stderr.maxFileSize=50MB
log4j.appender.stderr.maxBackupIndex=10
log4j.appender.stderr.encoding=UTF-8
log4j.appender.abc=org.apache.log4j.RollingFileAppender
log4j.appender.abc.append=true
log4j.appender.abc.file=${spark.yarn.app.container.log.dir}/appl.log
log4j.appender.abc.threshold=INFO
#log4j.appender.abc.layout=org.apache.log4j.PatternLayout
#log4j.appender.abc.layout.ConversionPattern=%d %p %c{1}:%L %m%n
log4j.appender.abc.layout.type = JsonTemplateLayout
log4j.appender.abc.layout.eventTemplateUri = classpath:Log4j2JsonEventTemplate.json
log4j.appender.abc.layout.locationInfoEnabled = true
log4j.appender.abc.maxFileSize=50MB
log4j.appender.abc.maxBackupIndex=10
# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR
# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
#My custom settings
log4j.logger.org.apache.spark=WARN
log4j.logger.org.apache.spark.deploy.yarn.YarnAllocator=ERROR
log4j.logger.com.mycompany=INFO, abc
#This below additivity stmt helps in not sending to streaming log stmts to root logger blocking duplication of stmts and saving space
log4j.additivity.com.mycompany=false
my JsonTemplateLayout.json is below
"@timestamp": {
"$resolver": "timestamp",
"pattern": {
"format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"timeZone": "UTC"
}
},
"ecs.version": "1.2.0",
"log.level": {
"$resolver": "level",
"field": "name"
},
"message": {
"$resolver": "message",
"stringified": true
},
"process.thread.name": {
"$resolver": "thread",
"field": "name"
},
"log.logger": {
"$resolver": "logger",
"field": "name"
},
"labels": {
"$resolver": "mdc",
"flatten": true,
"stringified": true
},
"tags": {
"$resolver": "ndc"
},
"error.type": {
"$resolver": "exception",
"field": "className"
},
"error.message": {
"$resolver": "exception",
"field": "message"
},
"error.stack_trace": {
"$resolver": "exception",
"field": "stackTrace",
"stackTrace": {
"stringified": true
}
}
}
I have my spark submit as below
spark-submit --files s3://my-company/log4j2.properties,s3://my-company/JsonTemplateLayout.json --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j2.properties --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j2.properties --class com.mycompany.mainApp --deploy-mode cluster --master yarn s3://my-company/appl.jar
The JsonTemplateLayout is not being recognized with the above spark submit and log4j2.properties ,
I even tried to read log4j2.properties from my uber jar , even they are unrecognized.
I am expecting my logs to be printed in Json format.
Below are my dependencies in my pom.xml
<dependency>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
<version>2.17.1</version>
</dependency>
<dependency>
<artifactId>log4j-core</artifactId>
<groupId>org.apache.logging.log4j</groupId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-layout-template-json</artifactId>
<version>2.17.1</version>
</dependency>
Can someone please help me