【问题标题】:Spark not taking log4j2.xmlSpark 不采用 log4j2.xml
【发布时间】:2017-03-01 11:20:24
【问题描述】:

我正在尝试使用 log4j2.xml 而不是 spark 的默认 log4j 日志记录。

我的 Log4j2.xml 如下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<Configuration status="WARN" name="MyApp" monitorInterval="30">

        <Properties>
            <Property name="appName">MyApp</Property>
            <Property name="appenderPatternLayout">%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</Property>
            <Property name="fileName">/app/vodip/logs/${appName}.log</Property>
        </Properties>

        <Appenders>
            <RollingFile name="RollingFile"
                         fileName="${fileName}"
                         filePattern="a1
                         ${appName}-%d{yyyy-MM-dd-HH}-%i.log">
                <PatternLayout>
                    <Pattern>${appenderPatternLayout}</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="4" modulate="true"/>
                    <SizeBasedTriggeringPolicy size="250 MB"/>
                </Policies>
            </RollingFile>
        </Appenders>


      <Loggers>
          <Logger name="xyz.abcs.MyApp" level="debug" additivity="false">
              <AppenderRef ref="RollingFile"/>
          </Logger>
          <Root level="debug">
              <AppenderRef ref="RollingFile"/>
          </Root>
      </Loggers>

    </Configuration>

我已将我的 log4j2.xml 放在所有节点上的 spark/conf 文件夹中,并重新启动 spark 并提交如下 spark 程序。

spark-submit --master spark://xyzzz.net:7077 \
--class abcd.myclass \
--deploy-mode cluster --executor-memory 2G --total-executor-cores 4  \
--conf spark.network.timeout=150 \
--files /app/spark/spark-1.6.1-bin-hadoop2.6/conf/log4j2.xml \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j2.xml" \
--driver-java-options "-Dlog4j.configuration=file:/app/spark/spark-1.6.1-bin-hadoop2.6/conf/log4j2.xml" \
/app/spark/my.jar

我在我的工人标准错误日志中看到了这一点。这意味着我的日志没有使用 log4j2 功能。

log4j:WARN 可继续解析错误 10 和第 78 列 log4j:WARN 文档根元素“配置”,必须匹配 DOCTYPE 根“null”。 log4j:WARN 持续解析错误 10 和第 78 列 log4j:WARN 文档无效:未找到语法。 log4j:ERROR DOM 元素是 - 不是一个元素。使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties

谁能告诉我配置有什么问题???

【问题讨论】:

  • 我认为你错过了&lt;!DOCTYPE 检查stackoverflow.com/questions/5000884/…
  • 我在代码中添加了这一行。 ttp://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" rel="nofollow" target="_blank">logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/…"> 但它给出了 log4j:WARN 持续解析错误 13 和列 78 log4j:WARN 文档根元素“配置”,必须匹配 DOCTYPE 根“log4j:configuration”。 log4j:WARN 持续解析错误 13 和第 78 列 log4j:WARN 必须声明元素类型“配置”。 log4j:WARN 持续解析错误 15 和第 17 列
  • 似乎 log4j2 不是 spark check thisthis 的朋友,如果你还没有的话

标签: apache-spark spark-streaming


【解决方案1】:

您的命令行中至少有一个错误会导致此错误

-Dlog4j.configuration=. . . 实际上必须是 -Dlog4j.configurationFile=. . . 使用 log4j2

log4j.configuration被老log4j解析,明显看不懂新的配置格式,抛出解析错误

【讨论】:

    【解决方案2】:

    您是否还将 log4j 文件放在项目的资源文件夹中,如果它会在那里,然后从那里删除它,并且对于使用 log4j 为驱动程序和执行程序记录 spark 应用程序,您还应该为驱动程序和执行程序提供 log4j 的路径作为关注

    spark-submit --class MAIN_CLASS --driver-java-options "-Dlog4j.configuration=file:PATH_OF_LOG4J" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:PATH_OF_LOG4J" --master MASTER_IP:PORT JAR_PATH
    

    您也可以参考此博客了解更多详情https://blog.knoldus.com/2016/02/23/logging-spark-application-on-standalone-cluster/

    【讨论】:

    • 我试过这个但继续收到错误和警告 log4j:WARN Continuable parsing error 42 和 column 43 log4j:WARN 必须声明元素类型“AppenderRef”。 log4j:ERROR DOM 元素 - 不是 元素。使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2021-11-17
    • 2015-11-30
    • 2017-11-14
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多