【问题标题】:How to specify different log4j.properties file for different flink job running on same standalone cluster如何为在同一独立集群上运行的不同 flink 作业指定不同的 log4j.properties 文件
【发布时间】:2018-12-03 17:05:20
【问题描述】:

我有多个在独立集群上运行的 flink 作业。我想要不同的日志文件用于不同的 flink 作业。那么如何在提交 flink 作业时传递不同的 log4j.properties 文件。

【问题讨论】:

    标签: apache-flink flink-streaming flink-cep


    【解决方案1】:

    到目前为止,还没有简单的方法来做到这一点,因为 flink 总是加载 flink/conf 下的文件。

    如果您使用 flink 的 one-yarn-cluster-per-job 模式(即您使用:flink run -m yarn-cluster ... 启动脚本),这里有一个解决方法:

    1. flink/conf 目录复制到仅用于您的工作的自定义位置
    2. 修改log4j.properties或任何其他配置文件
    3. 在启动你的工作之前,运行export FLINK_CONF_DIR=/path/to/my/conf

    根据你的 flink 版本,检查文件flink/bin/config.sh。如果你跑过这条线:

    FLINK_CONF_DIR=$FLINK_ROOT_DIR_MANGLED/conf
    

    改变它:

    if [ -z "$FLINK_CONF_DIR" ]; then 
        FLINK_CONF_DIR=$FLINK_ROOT_DIR_MANGLED/conf; 
    fi
    

    如果您找到其他方法,请与我们分享。

    【讨论】:

      【解决方案2】:

      根据 Flink 文档(最新版本),您可以在提交时传递 log4j / logback 文件来使用,这里是链接: https://ci.apache.org/projects/flink/flink-docs-master/monitoring/logging.html

      简而言之,您可以提供“-Dlog4j.configuration=/path/to/log4j.properties”或“-Dlogback.configurationFile=/path/to/logback.xml”。您也可以为每个作业配置不同的记录器,这样您就可以保留一个“logback"/"log4j”文件。下面是一个 logback 的例子:

      <!-- logback.xml -->
      <configuration>
          <property name="LOG_HOME" value="/path/to/logs" />
      
          <appender name="JOB1"
                    class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOG_HOME}/job1/job.out</file>
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <Pattern>
                      %d{yyyy-MM-dd HH:mm:ss} - %msg%n
                  </Pattern>
              </encoder>
      
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!-- rollover hourly -->
                  <fileNamePattern>${LOG_HOME}/job1/%d{yyyyMMdd_HH}.%i.log</fileNamePattern>
                  <timeBasedFileNamingAndTriggeringPolicy
                          class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                      <maxFileSize>1MB</maxFileSize>
                  </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
          </appender>
      
          <logger name="com.yourcompany.job1" level="INFO" additivity="false">
              <appender-ref ref="JOB1" />
          </logger>
      
          <!-- rest of configs -->
      </configuration>
      

      在您的代码中(以 Scala 为例,Java 几乎相同):

      import org.slf4j.LoggerFactory
      
      private final val logger = LoggerFactory.getLogger("com.yourcompany.job1")
      logger.info("some message")
      

      干杯

      【讨论】:

      • 但是您在哪里提供“-Dlog4j.configuration=/path/to/log4j.properties”?它似乎不是 Flink 的命令行选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多