在Spark Standalone模式下,spark默认使用org/apache/spark/log4j-defaults.properties配置,所有的日志都记录在stderr里面,由于Spark Streaming应用程序是一直运行的,时间长了以后stderr文件会非常大,占用空间的同时难以让我们调试和定位问题,所以我们需要切分日志,spark原生提供了对Executor日志的切分,Driver日志需要我们单独配置log4j。
- Executor日志切分,在spark应用环境变量中配置
spark.executor.logs.rolling.strategy time //可以按日期(time)和日志大小(size)来切分日志
spark.executor.logs.rolling.time.interval daily //可以按天、小时、分钟切分
spark.executor.logs.rolling.maxRetainedFiles 7 //保留多少个日志文件,旧的日志自动删除
或者也可以自定义日志生成方式,只要配置参数spark.executor.extraJavaOptions,指定log4j配置。
- Driver日志切分
sparksubmit的时候自定义log4j, –driver-java-options “-Dlog4j.configuration=file:/$PATH/log4j-driver.properties -Dapp.logging.name=NAME” ,用NAME去区分不同spark应用
log4j.rootCategory=INFO, FILE
log4j.appender.FILE.Threshold=info
log4j.appender.FILE.file=/$PATH/${app.logging.name}-driver.log
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[%p] %d %c %M - %m%n