You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark开发环境下log4j2.properties日志配置及格式文档咨询

PySpark log4j2 日志配置解决方案

问题核心

在Ubuntu开发环境中使用PySpark结合pytest测试,通过SparkSession.builder.getOrCreate()创建会话时,代码中info级别的日志无法输出,需实现以下需求:

  • 统一设置所有My.*日志记录器的级别
  • 日志同时输出到控制台和文件
  • 获取%t、%m、%n、%d{YYYY-MM-DD}等格式符的官方说明

之前尝试log4j 1.2的配置语法报错ConfigurationException: No type attribute provided for Appender my_console,找不到适配log4j2的有效配置指导。

有效log4j2.properties配置示例

Spark 3.x及以上版本默认使用log4j2,需采用其专属配置语法,以下是满足需求的完整配置:

# 根日志级别配置
rootLogger.level = INFO

# 配置My.*命名空间的日志规则
logger.my.name = My
logger.my.level = INFO
logger.my.additivity = false
logger.my.appenderRefs = console, file
logger.my.appenderRef.console.ref = ConsoleAppender
logger.my.appenderRef.file.ref = FileAppender

# 控制台追加器配置
appender.console.type = Console
appender.console.name = ConsoleAppender
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{YYYY-MM-DD HH:mm:ss} [%t] %-5level %logger{36} - %m%n

# 文件追加器配置(指定输出路径)
appender.file.type = File
appender.file.name = FileAppender
appender.file.fileName = ./spark_app.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{YYYY-MM-DD HH:mm:ss} [%t] %-5level %logger{36} - %m%n

配置生效方式

  1. 将上述内容保存为log4j2.properties文件
  2. 启动测试前通过环境变量指定配置路径:
export PYSPARK_SUBMIT_ARGS="--driver-java-options '-Dlog4j.configurationFile=file:///绝对路径/log4j2.properties' pyspark-shell"
pytest test_my_spark_module.py

或在Python代码开头添加(需在创建SparkSession前执行):

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = "--driver-java-options '-Dlog4j.configurationFile=file:///绝对路径/log4j2.properties' pyspark-shell"

日志格式符说明

你提到的格式符具体含义:

  • %t:当前线程名称
  • %m:日志消息内容
  • %n:换行符
  • %d{YYYY-MM-DD}:日志记录的日期(可扩展为%d{YYYY-MM-DD HH:mm:ss}包含时分秒)
    补充常用格式符:
  • %-5level:日志级别左对齐,占5字符宽度(如INFO 、DEBUG)
  • %logger{36}:日志记录器名称,最多显示36个字符

代码适配建议

你的代码中使用的是log4j 1.x的API,在log4j2环境下虽兼容,但建议切换为log4j2 API以避免潜在问题:

# 替换原日志获取代码
self.log = spark.sparkContext._jvm.org.apache.logging.log4j.LogManager.getLogger('My.SparkModule')

验证

运行测试后,控制台会输出My.*的info日志,同时指定的spark_app.log文件中也会同步生成日志内容。

内容的提问来源于stack exchange,提问作者Kashyap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:35