我想停止各种消息都是在火花壳。

我尝试编辑log4j。属性文件,以停止这些消息。

下面是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

我怎么阻止这些?


当前回答

禁用日志的方法如下:将日志级别设置为“OFF”。

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

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

log4j.rootCategory=OFF, console

其他回答

在命令行上很简单…

spark2-submit——driver-java-options = " -Droot。记录器=错误控制台”. .其他选项。

调整conf / log4j。其他描述的属性 log4j。rootCategory =错误控制台 确保在执行spark作业时使用log4j传递——file标志。属性文件路径 如果它仍然不起作用,您可能有一个包含log4j的jar。在新的log4j.properties之前被调用的属性。删除log4j。jar中的属性(如果合适)

如果您没有编辑java代码来插入. setloglevel()语句的能力,并且您不希望部署更多的外部文件,那么您可以使用暴力方法来解决这个问题。只需使用grep过滤掉INFO行。

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

一个有趣的想法是使用此处建议的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
sparkContext.setLogLevel("OFF")