首页 > 解决方案 > 如何以编程方式在 Pyspark 中获取日志级别

问题描述

我需要在 Pyspark 中以编程方式知道日志级别。

我知道我可以通过以下方式设置它:

# spark is a SparkSession object
spark.sparkContext.setLogLevel(log_level)

但是没有等效的方法来检索日志级别。

有任何想法吗?谢谢!

标签: apache-sparkpysparklog4j

解决方案


我终于想出了一个解决方案,通过访问 Spark 会话的 JVM(下面的 py4j):

def get_log_level(spark):
    log_manager = spark._jvm.org.apache.log4j.LogManager
    trace = spark._jvm.org.apache.log4j.Level.TRACE
    debug = spark._jvm.org.apache.log4j.Level.DEBUG
    info = spark._jvm.org.apache.log4j.Level.INFO
    warn = spark._jvm.org.apache.log4j.Level.WARN
    error = spark._jvm.org.apache.log4j.Level.ERROR
    fatal = spark._jvm.org.apache.log4j.Level.FATAL
    logger = log_manager.getRootLogger()

    if logger.isEnabledFor(trace):
        return "TRACE"
    elif logger.isEnabledFor(debug):
        return "DEBUG"
    elif logger.isEnabledFor(info):
        return "INFO"
    elif logger.isEnabledFor(warn):
        return "WARN"
    elif logger.isEnabledFor(error):
        return "ERROR"
    elif logger.isEnabledFor(fatal):
        return "FATAL"
    else:
        return None

很可能有更好的方法来做到这一点。


推荐阅读