スパークコンソールに表示されるINFOメッセージを停止する方法は?


181

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

これらを停止するにはどうすればよいですか?

回答:


168

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

それぞれの詳細はドキュメントにあります。


15
OFFは制限が多すぎると思います。WARNまたはERRORの方が適しています。
スノーインディ2015

2
それをプロジェクトのメインクラスに追加します。
AkhlD 2015

2
すばらしい答えです。プログラムでPySparkから同じことをする方法はありますか?
Tagar

2
このプログラム部分は機能しません。代わりに@cantdutchthisからこの回答を参照してくださいstackoverflow.com/a/37836847/1056563
javadba

1
この@AkhlDは誰ですか?
Aviad Klein

151

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");

このプロパティをプログラムでどのように設定しますか?
Alex Raj Kaliamoorthy 16

これは、spark.sql.SparkSessionのavaibaleか、JavaSparkContextのavaibaleですか?
SharpLu 2017

はい、JavaSparkContextで使用できます。ありがとう、@ cantdutchthis。これはしばらくの間私を悩ませてきました。
アラン

1
これは、個別のlog4jを作成せずに私にとってうまくいった唯一の答えです。ありがとう!
abhihello123

2
それは私にとってはうまくいきますが、テストの初めにまだいくつかのメッセージを受け取っています。何か案が?

46

.confファイルの変更を提案してくれた@AkhlDと@Sachin Jananiに感謝します。

次のコードは私の問題を解決しました:

1)import org.apache.log4j.{Level, Logger}インポートセクションに追加

2)Sparkコンテキストオブジェクトの作成後に次の行を追加しましたval sc = new SparkContext(conf)

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

12
これを試しましたが、まだログ出力を取得しています。
horatio1701d 2016年

1
conf /にアクセスする権限がないため、このソリューションが好きです
Jim Ho

31

以下のコマンドを使用して、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"

注:設定ファイルが保存されている<file path>場所を置き換え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>

ここで理解しておくべきもう1つの重要な点は、ジョブが分散モード(デプロイモードクラスターで起動され、マスターが糸またはメソ)で起動される場合、log4j構成ファイルがドライバーとワーカーノードに存在する必要があります(log4j.configuration=file:<file path>/log4j.xml)そうでない場合、log4j initは文句を言うでしょう-

log4j:ERROR構成ファイル[log4j.properties]を読み取れませんでした。java.io.FileNotFoundException:log4j.properties(そのようなファイルまたはディレクトリはありません)

この問題を解決するためのヒント

log4j構成ファイルを分散ファイルシステム(HDFSまたはmesos)に保持し、log4j PropertyConfiguratorを使用して外部構成を追加します。または、sparkContext addFileを使用して各ノードで使用できるようにしてから、log4j PropertyConfiguratorを使用して構成を再ロードします。


2
これは、org伝統的なデフォルトのロガーからのログをすべて破棄しない数少ない例の1つです。
deepelement 2017

1
これは非常にうまく機能しLog4j.propertiesますが、ファイルの目的は何ですか?使用されていないようです。XMLファイルに設定されたプロパティを単に文書化していますか?
vy32

1
どちらでも使用できます。
Rahul Sharma

3
私は上記で成功しました-私--filesは、spark-submitコマンドでlog4j.propertiesをすべてのノードで利用できるようにします。
ベンワトソン

1
これは私にとって有効な唯一のソリューションであり、コードの変更は含まれていません。ファイルを作成します。Log4.propertiesmain/resourcesが存在しないという場合には
Yeikel

30

例とともに収集されたすべてのメソッド

はじめに

実際には、さまざまな方法があります。いくつかは他のものよりも難しいですが、どれがあなたに最も適しているかはあなた次第です。私はそれらすべてを紹介しようとします。


アプリでプログラム的に#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)

log4jAPI を使用するだけで、さらに多くのことを実現できます。
出典:[ Log4J構成ドキュメント、構成セクション]


#2パスlog4j.propertiesspark-submit

これは非常にトリッキーですが、不可能ではありません。そして、私のお気に入り。

アプリの起動中のLog4Jは、常にlog4j.propertiesクラスパスからファイルを探してロードしています。

ただし、spark-submitSpark Clusterのクラスパスを使用すると、アプリのクラスパスよりも優先されます。このため、このファイルをfat-jarに配置しても、クラスターの設定は上書きされません。

(ドライバーの場合)または(エグゼキューターの場合)に追加-Dlog4j.configuration=<location of configuration file>し ます。spark.driver.extraJavaOptions
spark.executor.extraJavaOptions

ファイルを使用する場合は、file:プロトコルを明示的に指定する必要があり、ファイルはすべてのノードにローカルに存在する必要があることに注意してください。

最後の条件を満たすには、ノードの使用可能な場所(などhdfs)にファイルをアップロードするか、を使用している場合はドライバーを使用してローカルにアクセスしdeploy-mode clientます。さもないと:

アプリケーションでアップロードするファイルlog4j.properties--filesリストに追加することにより、spark-submitを使用してカスタムをアップロードします。

出典: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"

モードを使用する--driver-java-options場合は、使用する必要があることに注意してclientください。Spark docs、ランタイム環境

実行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. アップロードされたファイルspark-clusterでは--files、ルートディレクトリで利用できるようになり、その内の任意のパスを追加する必要はありませんfile:log4j.properties
  2. にリストされているファイルに--filesは絶対パスを指定する必要があります!
  3. file: 構成URIのプレフィックスは必須です。

#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-defaults.confspark-env.shlog4j.propertiesなどをこのディレクトリから)。

出典:Spark docs、Configuration

手順:

  1. クラスターのconfフォルダーをコピーする(詳細、方法#3)
  2. log4j.propertiesそのフォルダーで編集する(方法#2の例)
  3. SPARK_CONF_DIR実行する前に、このフォルダに設定しますspark-submit
    例:

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

結論

他の方法があるかどうかはわかりませんが、これでAからZまでのトピックがカバーされることを願っています。ない場合は、コメントで遠慮なくpingしてください。

楽しみましょう!


これは受け入れられる答えになるはずです。それは多くの詳細を提供し、他よりもはるかに多くのユースケースを要約します。(ログを無効にすることを勧めない。)
belgacea

@Atais-以下を追加する必要があるので、私のようで、上記の回答が役に立たない場合は、log4j confファイルから '.template'サフィックスを削除する必要があります。
oneday

1
プログラムによるアプローチに関する追加メモ
Arunraj Nair

ログはSparkContextに接続されていない独立した機能であるため、@ ArunrajNairは当てはまりません。
アタイス

19

ログを無効にするには、次のようにレベルをオフに設定します。

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

または、次のプロパティを変更するだけで、ログファイルを編集してログレベルをオフに設定します。

log4j.rootCategory=OFF, console

上記のプロパティをどのファイルに設定しますか?
Vishwas 2015年

あなたのドライバプログラム@Vishwasにこれらの行を追加することができます
サチンJanani

同じものを追加しましたが、まだログがコンソールに表示されます
Vishwas

プロパティlog4j.rootCategory = OFFを変更してください。私はこれらを私の終わりでテストし、その
正常

3
これにより、Spark 2.3.1での私の違いはゼロになります
Toby Eggitt '29

15

この行を、すべてのpysparkスクリプトのimportステートメントのすぐ下に追加します。

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

pysparkスクリプトのヘッダーの例

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

13
これは機能しますが、Sparkコンテキストの作成中に表示される58行のINFOメッセージを停止しません。
vy32

1
これはSpark 2.x向けであることに注意してください
Yeikel

13

上記の回答は正しいですが、必要な追加情報があったため、正確には役に立ちませんでした。

私はちょうどSparkをセットアップしたので、log4jファイルにはまだ「.template」サフィックスがあり、読み取られていませんでした。ロギングはデフォルトでSparkコアのロギングconfになると思います。

したがって、あなたが私のようなもので、上記の回答が役に立たない場合、多分あなたもlog4j confファイルから '.template'サフィックスを削除する必要があり、それから上記は完全に機能します!

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


この答えを確認してください。stackoverflow.com/ a / 51554118/2094086あなたが同じものを探していることを願っています。
Gaurav Adurkar

5

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 task 612.1 in stage 0.0(TID 2570 ...、エグゼキュータ15):TaskKilled(別のアテム
MrCartoonology

5

tl; dr

Spark Contextの場合、次を使用できます。

sc.setLogLevel(<logLevel>)

ここでloglevel、ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE、またはWARNを指定できます。


詳細-

内部的にsetLogLevelorg.apache.log4j.Level.toLevel(logLevel)、を使用して設定するために使用する呼び出しorg.apache.log4j.LogManager.getRootLogger().setLevel(level)

ロギングレベルを次のように直接設定できますOFF

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

でSparkシェルのデフォルトのロギングを設定できますconf/log4j.propertiesconf/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。


3

以下のパラメーターをspark-shellまたはspark-submitコマンドに追加するだけです

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

log4j.propertiesファイルから正確なプロパティ名(ここではlog4jspark.root.logger)を確認します。よろしくお願いいたします。


1
これをコマンドラインから設定するのは素晴らしいでしょう。しかし、これは私にはうまくいきませんでした。
swdev

2

面白いアイデアは、ここで提案したようRollingAppenderを使用することです:http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/を あなたが「polute」コンソールスペースをしないように、しかし、 $ 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

原因を解決するもう1つの方法は、通常はどのような種類のログ(さまざまなモジュールや依存関係からのもの)を持っているかを観察し、ログの細かさをそれぞれに設定すると同時に、冗長すぎる「静かな」サードパーティのログをオンにすることです。

例えば、

    # 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

2

コマンドラインで行うのは簡単...

spark2-submit --driver-java-options="-Droot.logger=ERROR,console" ..別のオプション..


なにspark2-submit
vy32 2018年

spark2-submitはSpark2に使用されます。
ネフィリム

0
  1. 他のlog4j.rootCategory = ERROR、コンソールの説明に従って、conf / log4j.propertiesを調整します
  2. Sparkジョブの実行中に、log4j.propertiesファイルパスで--fileフラグを渡すことを確認してください
  3. それでも機能しない場合は、新しいlog4j.propertiesの前に呼び出されるlog4j.propertiesを持つjarがある可能性があります。jarからlog4j.propertiesを削除します(該当する場合)

0
sparkContext.setLogLevel("OFF")

1
私は両方を行いました-log4j.propertiesから.templateサフィックスを削除し、レベルをERRORに設定しました。 val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR) それは機能しました
Sam-T

0

上記のすべての投稿に加えて、ここで問題が解決されました。

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

お役に立てれば!


0

これは私のために働いた。エラーメッセージのみがとして表示される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フォルダーに入れてください。IFおよびlog4j.properties(意味が存在していないspark使用しているlog4j-defaults.propertiesファイル)を、あなたはに行くことによってそれを作成することができSPARK_HOME/conf、その後とmv log4j.properties.template log4j.properties、その後の変更をして上記進めると述べました。


0

.setLogLevel()ステートメントを挿入するJavaコードを編集する機能がなく、さらに外部ファイルをデプロイしたくない場合は、ブルートフォースの方法を使用してこれを解決できます。grepを使用してINFO行を除外するだけです。

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

0

他の誰かがこれで立ち往生している場合、

上記のどれも私にとってはうまくいきませんでした。削除しなければならなかった

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


0

ログを完全に停止する別の方法は次のとおりです。

    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は

ログイベントを無視するアペンダー。(https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.