如何为在同一独立集群上运行的不同flink作业指定不同的log4j.properties文件

gijlo24d  于 2021-06-25  发布在  Flink
关注(0)|答案(2)|浏览(799)

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

brc7rcf0

brc7rcf01#

到目前为止,还没有简单的方法可以做到这一点,因为flink总是在下面加载文件 flink/conf .
如果您使用flink的“每个作业一个Yarn簇”模式(即,启动脚本时使用: flink run -m yarn-cluster ... ),这里有一个解决方法:
复制 flink/conf 目录到仅用于作业的自定义位置
修改 log4j.properties 或任何其他配置文件
启动作业之前,请运行 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

如果你有别的办法,请与我们分享。

8yoxcaq7

8yoxcaq72#

根据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")

干杯

相关问题