如何为同一 Standalone cluster上运行的不同flink job指定不同的log4j.properties文件


0

我有多个flink job在一个独立的集群上运行。我需要不同的日志文件为不同的flink job 。那么,如何在提交flink job时传递不同的log4j.properties文件呢。

2 答案


0

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

如果您使用flink的每个 job模式一个 Yarn 集群(即,使用以下命令启动脚本:flink run-m yarn cluster…),下面是一个解决方法:

    将flink/conf目录复制到仅用于您的 job的自定义位置

root据您的flink版本,检查flink/bin文件/配置.sh。如果您的跑步经过这条线:

FLINK_CONF_DIR=$FLINK_ROOT_DIR_MANGLED/conf

更改为:

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

如果你找到另一种方法,请与我们分享。


0

root据Flink文档(最新版本),提交时只需传递log4j/logback文件即可使用, chaining接如下:

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

<!-- logback.xml -->
<configuration>
    <property name="LOG_HOME" value="/path/to/logs" />

&lt;appender name="JOB1"
          class="ch.qos.logback.core.rolling.RollingFileAppender"&gt;
    &lt;file&gt;${LOG_HOME}/job1/job.out&lt;/file&gt;
    &lt;encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"&gt;
        &lt;Pattern&gt;
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        &lt;/Pattern&gt;
    &lt;/encoder&gt;

    &lt;rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&gt;
        &lt;!-- rollover hourly --&gt;
        &lt;fileNamePattern&gt;${LOG_HOME}/job1/%d{yyyyMMdd_HH}.%i.log&lt;/fileNamePattern&gt;
        &lt;timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"&gt;
            &lt;maxFileSize&gt;1MB&lt;/maxFileSize&gt;
        &lt;/timeBasedFileNamingAndTriggeringPolicy&gt;
    &lt;/rollingPolicy&gt;
&lt;/appender&gt;

&lt;logger name="com.yourcompany.job1" level="INFO" additivity="false"&gt;
    &lt;appender-ref ref="JOB1" /&gt;
&lt;/logger&gt;

&lt;!-- rest of configs --&gt;

</configuration>

在您的代码中(例如Scala,它与Java基本相同):

import org.slf4j.LoggerFactory

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

干杯


我来回答

写文章

提问题

面试题