【问题标题】:How to stop INFO messages displaying on spark console?如何停止在火花控制台上显示 INFO 消息?
【发布时间】:2015-03-03 02:07:42
【问题描述】:

我想停止 spark shell 上的各种消息。

我试图编辑log4j.properties 文件以阻止这些消息。

这里是log4j.properties的内容

# Define the root logger with appender file
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

但消息仍然显示在控制台上。

以下是一些示例消息

15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 15:11:45 INFO BlockManagerMaster: Trying to register BlockManager
15/01/05 15:11:45 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager 192.168.100.85:44728 with 0.0 B RAM
15/01/05 15:11:45 INFO BlockManagerMaster: Registered BlockManager
15/01/05 15:11:45 INFO HttpServer: Starting HTTP Server
15/01/05 15:11:45 INFO HttpBroadcast: Broadcast server star

如何阻止这些?

【问题讨论】:

    标签: apache-spark log4j spark-submit


    【解决方案1】:

    编辑您的conf/log4j.properties 文件并更改以下行:

    log4j.rootCategory=INFO, console
    

    log4j.rootCategory=ERROR, console
    

    另一种方法是:

    启动 spark-shell 并输入以下内容:

    import org.apache.log4j.Logger
    import org.apache.log4j.Level
    
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("akka").setLevel(Level.OFF)
    

    之后您将看不到任何日志。

    级别的其他选项包括:alldebugerrorfatalinfoofftracetrace_intwarn

    Details about each can be found in the documentation.

    【讨论】:

    • 我认为 OFF 限制性太强。 WARN 或 ERROR 可能更适合这里。
    • 将其添加到您的项目主类中。
    • 很好的答案。有什么方法可以通过 PySpark 以编程方式做同样的事情?
    • 其中的程序化部分不起作用。而是从@cantdutchthis stackoverflow.com/a/37836847/1056563 看到这个答案
    • 这是谁@AkhlD?
    【解决方案2】:

    在启动spark-shell 之后立即输入;

    sc.setLogLevel("ERROR")
    

    在 Spark 2.0 (Scala) 中:

    spark = SparkSession.builder.getOrCreate()
    spark.sparkContext.setLogLevel("ERROR")
    

    API 文档:https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

    对于 Java:

    spark = SparkSession.builder.getOrCreate();
    spark.sparkContext().setLogLevel("ERROR");
    

    【讨论】:

    • 如何在程序中设置此属性?
    • 这仅适用于 spark.sql.SparkSession 或也适用于 JavaSparkContext ??
    • 是的,它适用于JavaSparkContext。谢谢,@cantdutchthis。这困扰了我一段时间。
    • 这是唯一对我有用的答案,无需创建单独的 log4j。谢谢!
    • 它对我有用,但是在测试开始时我仍然收到几条消息。有什么想法吗?
    【解决方案3】:

    收集到的所有方法都有例子

    简介

    实际上,有很多方法可以做到这一点。 有些比其他的更难,但由你决定哪一个最适合你。我会尽量展示它们。


    #1 以编程方式在您的应用中

    似乎是最简单的,但您需要重新编译您的应用程序才能更改这些设置。就个人而言,我不喜欢它,但它工作正常。

    示例:

    import org.apache.log4j.{Level, Logger}
    
    val rootLogger = Logger.getRootLogger()
    rootLogger.setLevel(Level.ERROR)
    
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.spark-project").setLevel(Level.WARN)
    

    您可以使用log4j API 实现更多目标。
    来源:[Log4J Configuration Docs,配置部分]


    #2 在spark-submit 期间通过log4j.properties

    这是一个非常棘手的问题,但并非不可能。还有我最喜欢的。

    在应用启动期间,Log4J 总是从类路径中寻找并加载 log4j.properties 文件。

    但是,当使用spark-submit Spark Cluster 的类路径优先于应用程序的类路径!这就是为什么将此文件放入您的 fat-jar 中不会覆盖集群设置的原因!

    -Dlog4j.configuration=<location of configuration file> 添加到 spark.driver.extraJavaOptions(驱动程序)
    spark.executor.extraJavaOptions(执行器)

    请注意,如果使用 文件,应明确提供file: 协议,和文件 需要在所有节点上本地存在

    要满足最后一个条件,您可以将文件上传到节点可用的位置(如hdfs),或者如果使用deploy-mode client,则使用驱动程序在本地访问它。否则:

    使用 spark-submit 上传自定义 log4j.properties,将其添加到 --files 与应用程序一起上传的文件列表。

    来源:Spark docs, Debugging

    步骤:

    例如log4j.properties:

    # Blacklist all to warn level
    log4j.rootCategory=WARN, console
    
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.target=System.err
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
    
    # Whitelist our app to info :)
    log4j.logger.com.github.atais=INFO
    

    执行spark-submit,集群模式:

    spark-submit \
        --master yarn \
        --deploy-mode cluster \
        --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
        --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
        --files "/absolute/path/to/your/log4j.properties" \
        --class com.github.atais.Main \
        "SparkApp.jar"
    

    请注意,如果使用client 模式,则必须使用--driver-java-optionsSpark docs, Runtime env

    执行spark-submit,用于客户端模式:

    spark-submit \
        --master yarn \
        --deploy-mode client \
        --driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties" \
        --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
        --files "/absolute/path/to/your/log4j.properties" \
        --class com.github.atais.Main \
        "SparkApp.jar"
    

    注意事项:

    1. 使用--files 上传到spark-cluster 的文件将在根目录下可用,因此无需在file:log4j.properties 中添加任何路径。
    2. --files 中列出的文件必须提供绝对路径!
    3. 配置 URI 中的 file: 前缀是必需的。

    #3 编辑集群的conf/log4j.properties

    这会更改全局日志记录配置文件

    更新$SPARK_CONF_DIR/log4j.properties 文件,它将是 与其他配置一起自动上传。

    来源:Spark docs, Debugging

    要找到您的SPARK_CONF_DIR,您可以使用spark-shell

    atais@cluster:~$ spark-shell 
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /___/ .__/\_,_/_/ /_/\_\   version 2.1.1
          /_/   
    
    scala> System.getenv("SPARK_CONF_DIR")
    res0: String = /var/lib/spark/latest/conf
    

    现在只需编辑 /var/lib/spark/latest/conf/log4j.properties(以方法 #2 中的示例为例),您的所有应用都会共享此配置。


    #4 覆盖配置目录

    如果您喜欢解决方案 #3,但想为每个应用程序自定义它,您实际上可以复制 conf 文件夹,编辑其内容并在 spark-submit 期间指定为根配置。

    要指定默认“SPARK_HOME/conf”以外的其他配置目录,您可以设置SPARK_CONF_DIR。 Spark 将使用此目录中的配置文件(spark-defaults.confspark-env.shlog4j.properties)。

    来源:Spark docs, Configuration

    步骤:

    1. 复制集群的conf 文件夹(更多信息,方法#3)

    2. 在该文件夹中编辑log4j.properties(方法#2 中的示例)

    3. 在执行spark-submit之前,将SPARK_CONF_DIR设置为该文件夹,
      示例:

      export SPARK_CONF_DIR=/absolute/path/to/custom/conf
      
      spark-submit \
          --master yarn \
          --deploy-mode cluster \
          --class com.github.atais.Main \
          "SparkApp.jar"
      

    结论

    我不确定是否还有其他方法,但我希望这涵盖了从头到尾的主题。如果没有,请随时在 cmets 中联系我!

    尽情享受吧!

    【讨论】:

    • 这应该是公认的答案。它提供了很多细节,并总结了比其他用例更多的用例。 (不鼓励禁用日志。)
    • @Atais - 你应该在下面添加所以如果你像我一样发现上面的答案没有帮助,那么也许你也必须从你的 log4j conf 文件中删除“.template”后缀然后上面的工作就完美了!
    • 关于编程方法的附加说明 - 必须在创建 SparkContext 之前设置级别
    • @ArunrajNair 不应该是这样,因为日志记录是一个单独的功能,没有连接到 SparkContext。
    【解决方案4】:

    感谢 @AkhlD 和 @Sachin Janani 建议更改 .conf 文件。

    以下代码解决了我的问题:

    1) 在导入部分添加import org.apache.log4j.{Level, Logger}

    2) 在创建 spark 上下文对象后添加以下行,即在 val sc = new SparkContext(conf) 之后:

    val rootLogger = Logger.getRootLogger()
    rootLogger.setLevel(Level.ERROR)
    

    【讨论】:

    • 试过了,但仍然得到日志输出。
    • 我喜欢这个解决方案,因为没有权限访问 conf/
    • 这只会改变当前java进程的日志级别,在Spark初始化之后
    【解决方案5】:

    在使用 spark-submit 或 spark-sql 提交应用程序时使用以下命令更改日志级别:

    spark-submit \
    --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml" \
    --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml"
    

    注意:替换&lt;file path&gt; 存储log4j 配置文件的位置。

    Log4j.properties:

    log4j.rootLogger=ERROR, console
    
    # set the log level for these components
    log4j.logger.com.test=DEBUG
    log4j.logger.org=ERROR
    log4j.logger.org.apache.spark=ERROR
    log4j.logger.org.spark-project=ERROR
    log4j.logger.org.apache.hadoop=ERROR
    log4j.logger.io.netty=ERROR
    log4j.logger.org.apache.zookeeper=ERROR
    
    # add a ConsoleAppender to the logger stdout to write to the console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    # use a simple message format
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    log4j.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
       <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
      </appender>
        <logger name="org.apache.spark">
            <level value="error" />
        </logger>
        <logger name="org.spark-project">
            <level value="error" />
        </logger>
        <logger name="org.apache.hadoop">
            <level value="error" />
        </logger>
        <logger name="io.netty">
            <level value="error" />
        </logger>
        <logger name="org.apache.zookeeper">
            <level value="error" />
        </logger>
       <logger name="org">
            <level value="error" />
        </logger>
        <root>
            <priority value ="ERROR" />
            <appender-ref ref="console" />
        </root>
    </log4j:configuration>

    如果您想将日志写入文件而不是控制台,请切换到 log4j.xml 中的 FileAppender。 LOG_DIR 是日志目录的变量,您可以使用 spark-submit --conf "spark.driver.extraJavaOptions=-D 提供。

    <appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="file" value="${LOG_DIR}"/>
            <param name="datePattern" value="'.'yyyy-MM-dd"/>
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
            </layout>
        </appender>

    这里要理解的另一件重要的事情是,当作业以分布式模式启动时(部署模式集群和 master 作为 yarn 或 mesos),log4j 配置文件应该存在于驱动程序和工作节点上(log4j.configuration=file:&lt;file path&gt;/log4j.xml)否则 log4j init 将抱怨-

    log4j:ERROR 无法读取配置文件 [log4j.properties]。 java.io.FileNotFoundException: log4j.properties (没有这样的文件或 目录)

    关于解决这个问题的提示-

    将 log4j 配置文件保存在分布式文件系统(HDFS 或 mesos)中,并使用 log4j PropertyConfigurator 添加外部配置。 或使用sparkContext addFile 使其在每个节点上可用,然后使用 log4j PropertyConfigurator 重新加载配置。

    【讨论】:

    • 这是少数几个不会破坏所有传统上来自默认记录器的 org 日志的示例之一。
    • 这很好用,但是Log4j.properties 文件是干什么用的?好像没用过。您只是记录 XML 文件中设置的属性吗?
    • 你可以使用其中任何一个。
    • 我在上面取得了成功 - 我在 spark-submit 命令中使用--files 使 log4j.properties 在所有节点上可用。
    • 这是唯一对我有用的解决方案,它不涉及任何代码更改。在main/resources下创建一个文件Log4.properties,以防不存在
    【解决方案6】:

    您可以通过将其级别设置为 OFF 来禁用日志,如下所示:

    Logger.getLogger("org").setLevel(Level.OFF);
    Logger.getLogger("akka").setLevel(Level.OFF);
    

    或编辑日志文件并将日志级别设置为关闭,只需更改以下属性:

    log4j.rootCategory=OFF, console
    

    【讨论】:

    • 我在哪个文件中设置以上属性??
    • 您可以在您的驱动程序@Vishwas 中添加这些行
    • 我添加了相同但日志仍然出现在控制台上
    • 您是否更改了属性 log4j.rootCategory=OFF。我已经测试了这些,并且工作正常
    • 这对我来说在 Spark 2.3.1 上的差异为零
    【解决方案7】:

    我只是将这一行添加到我所有的 pyspark 脚本中,就在 import 语句的下方。

    SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")
    

    我的 pyspark 脚本的示例标头

    from pyspark.sql import SparkSession, functions as fs
    SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")
    

    【讨论】:

    • 这行得通,但它不会阻止在创建 Spark 上下文期间出现的 58 行 INFO 消息。
    • 请注意,这是针对 Spark 2.x 的
    【解决方案8】:

    上面的答案是正确的,但并没有完全帮助我,因为我需要额外的信息。

    我刚刚设置了 Spark,所以 log4j 文件仍然有 '.template' 后缀并且没有被读取。我相信日志记录默认为 Spark 核心日志记录配置。

    所以如果你和我一样发现上面的答案没有帮助,那么也许你也必须从你的 log4j conf 文件中删除“.template”后缀,然后上面的方法就完美了!

    http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html

    【讨论】:

    【解决方案9】:

    在 Python/Spark 中我们可以这样做:

    def quiet_logs( sc ):
      logger = sc._jvm.org.apache.log4j
      logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
      logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )
    

    定义 Sparkcontaxt 'sc' 之后 通过以下方式调用此函数: quiet_logs( sc )

    【讨论】:

    • 我很想找到一种不会弄乱 log4j 文件的编程方式——但是当我尝试这样做时,我仍然收到类似 WARN org.apache.spark.scheduler.TaskSetManager: Lost 的警告阶段 0.0 中的任务 612.1(TID 2570 ...,执行程序 15):TaskKilled(另一个尝试
    【解决方案10】:

    tl;博士

    对于 Spark 上下文,您可以使用:

    sc.setLogLevel(<logLevel>)
    

    其中loglevel 可以是 ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE 或 警告。


    详情-

    在内部,setLogLevel 调用 org.apache.log4j.Level.toLevel(logLevel),然后使用 org.apache.log4j.LogManager.getRootLogger().setLevel(level) 进行设置。

    您可以使用以下命令直接将日志记录级别设置为OFF

    LogManager.getLogger("org").setLevel(Level.OFF)
    

    您可以在conf/log4j.properties 中设置 Spark shell 的默认日志记录。以conf/log4j.properties.template 为起点。

    在 Spark 应用程序中设置日志级别

    在独立的 Spark 应用程序中或在 Spark Shell 会话中,使用以下命令:

    import org.apache.log4j.{Level, Logger}
    
    Logger.getLogger(classOf[RackResolver]).getLevel
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("akka").setLevel(Level.OFF)
    

    禁用日志记录(在 log4j 中):

    conf/log4j.properties 中使用以下命令完全禁用日志记录:

    log4j.logger.org=OFF
    

    参考:Jacek Laskowski 的 Mastering Spark。

    【讨论】:

      【解决方案11】:

      只需将以下参数添加到您的 spark-shell 或 spark-submit 命令中

      --conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"
      

      从 log4j.properties 文件中检查确切的属性名称(此处为 log4jspark.root.logger)。 希望这会有所帮助,干杯!

      【讨论】:

      • 从命令行设置它会很棒。但这对我不起作用。
      【解决方案12】:

      在命令行上很简单...

      spark2-submit --driver-java-options="-Droot.logger=ERROR,console" ..其他选项..

      【讨论】:

      • spark2-submit 是什么?
      • spark2-submit 用于 Spark2。
      【解决方案13】:

      将以下内容添加到 PySpark 为我完成了这项工作:

      self.spark.sparkContext.setLogLevel("ERROR")
      

      self.spark 是火花会话 (self.spark = spark_builder.getOrCreate())

      【讨论】:

        【解决方案14】:

        一个有趣的想法是按照这里的建议使用 RollingAppender:http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/ 这样您就不会“污染”控制台空间,但仍然可以在 $YOUR_LOG_PATH_HERE/${dm.logging.name}.log 下看到结果。

            log4j.rootLogger=INFO, rolling
        
        log4j.appender.rolling=org.apache.log4j.RollingFileAppender
        log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
        log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n
        log4j.appender.rolling.maxFileSize=50MB
        log4j.appender.rolling.maxBackupIndex=5
        log4j.appender.rolling.file=$YOUR_LOG_PATH_HERE/${dm.logging.name}.log
        log4j.appender.rolling.encoding=UTF-8
        

        另一种解决原因的方法是观察您通常拥有什么样的日志记录(来自不同的模块和依赖项),并为每个日志设置粒度,同时将“安静”的第三方日志也设置为详细:

        例如,

            # Silence akka remoting
        log4j.logger.Remoting=ERROR
        log4j.logger.akka.event.slf4j=ERROR
        log4j.logger.org.spark-project.jetty.server=ERROR
        log4j.logger.org.apache.spark=ERROR
        log4j.logger.com.anjuke.dm=${dm.logging.level}
        log4j.logger.org.eclipse.jetty=WARN
        log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
        log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
        log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
        

        【讨论】:

          【解决方案15】:
          1. 按照其他说明调整 conf/log4j.properties log4j.rootCategory=错误,控制台
          2. 确保在执行 spark 作业时将 --file 标志与 log4j.properties 文件路径一起传递
          3. 如果它仍然不起作用,您可能有一个 jar,其中包含在您的新 log4j.properties 之前被调用的 log4j.properties。从 jar 中删除该 log4j.properties(如果适用)

          【讨论】:

            【解决方案16】:
            sparkContext.setLogLevel("OFF")
            

            【讨论】:

            • 我都做到了——从 log4j.properties 中删除了 .template 后缀并将级别设置为 ERROR,然后val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR) 成功了
            【解决方案17】:

            除了以上所有帖子之外,以下是为我解决问题的方法。

            Spark 使用 slf4j 绑定到记录器。如果 log4j 不是找到的第一个绑定,您可以随意编辑 log4j.properties 文件,甚至不使用记录器。例如,这可能是 SLF4J 输出:

            SLF4J:类路径包含多个 SLF4J 绑定。 SLF4J:在 [jar:file:/C:/Users/~/.m2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar!/org/slf4j/ 中找到绑定impl/StaticLoggerBinder.class] SLF4J:在 [jar:file:/C:/Users/~/.m2/repository/org/slf4j/slf4j-log4j12/1.7.19/slf4j-log4j12-1.7.19.jar!/org/slf4j/ 中找到绑定impl/StaticLoggerBinder.class] SLF4J:请参阅http://www.slf4j.org/codes.html#multiple_bindings 了解说明。 SLF4J:实际绑定的类型是 [org.slf4j.impl.SimpleLoggerFactory]

            所以这里使用了 SimpleLoggerFactory,它不关心 log4j 设置。

            通过我的项目排除 slf4j-simple 包

            <dependency>
                    ...
                    <exclusions>
                        ...
                        <exclusion>
                            <artifactId>slf4j-simple</artifactId>
                            <groupId>org.slf4j</groupId>
                        </exclusion>
                    </exclusions>
                </dependency>
            

            解决了这个问题,因为现在使用了 log4j 记录器绑定,并且遵守了 log4j.properties 中的任何设置。 供参考。我的 log4j 属性文件包含(除了正常配置)

            log4j.rootLogger=WARN, stdout
            ...
            log4j.category.org.apache.spark = WARN
            log4j.category.org.apache.parquet.hadoop.ParquetRecordReader = FATAL
            log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false
            log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFF
            

            希望这会有所帮助!

            【讨论】:

              【解决方案18】:

              这个对我有用。 对于仅显示为stdout 的错误消息,log4j.properties 文件可能如下所示:

              # Root logger option
              log4j.rootLogger=ERROR, stdout
              # Direct log messages to stdout
              log4j.appender.stdout=org.apache.log4j.ConsoleAppender
              log4j.appender.stdout.Target=System.out
              log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
              log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
              

              注意:将log4j.properties 文件放入src/main/resources 文件夹中 有效的。 如果log4j.properties 不存在(意味着spark 正在使用log4j-defaults.properties 文件),那么您可以通过转到SPARK_HOME/conf 然后mv log4j.properties.template log4j.properties 创建它,然后继续进行上述更改。

              【讨论】:

                【解决方案19】:

                如果您无法编辑 java 代码以插入 .setLogLevel() 语句,并且您不希望部署更多外部文件,则可以使用蛮力方法解决此问题。只需使用 grep 过滤掉 INFO 行。

                spark-submit --deploy-mode client --master local <rest-of-cmd> | grep -v -F "INFO"
                

                【讨论】:

                  【解决方案20】:

                  如果其他人被困在这个问题上,

                  以上没有对我有用。 我不得不删除

                  implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.3"
                  implementation group: 'com.typesafe.scala-logging', name: "scala-logging_$scalaVersion", version: '3.9.2'
                  

                  从我的 build.gradle 中删除日志。 TLDR:不要导入任何其他日志框架,使用org.apache.log4j.Logger 应该没问题

                  【讨论】:

                    【解决方案21】:

                    另一种完全停止日志的方法是:

                        import org.apache.log4j.Appender;
                        import org.apache.log4j.BasicConfigurator;
                        import org.apache.log4j.varia.NullAppender;
                    
                        public class SomeClass {
                    
                            public static void main(String[] args) {
                                Appender nullAppender = new NullAppender();
                                BasicConfigurator.configure(nullAppender);
                    
                                {...more code here...}
                    
                            }
                        }
                    

                    这对我有用。 NullAppender 是

                    一个忽略日志事件的 Appender。 (https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html)

                    【讨论】:

                      猜你喜欢
                      • 2021-07-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-02-14
                      • 1970-01-01
                      • 2022-01-16
                      • 1970-01-01
                      • 2021-02-13
                      相关资源
                      最近更新 更多