我有多个flink作业在一个独立的集群上运行。我想为不同的flink作业使用不同的日志文件。那么,如何在提交flink作业时传递不同的log4j.properties文件呢。
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
flink run -m yarn-cluster ...
log4j.properties
export FLINK_CONF_DIR=/path/to/my/conf
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
如果你有别的办法,请与我们分享。
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示例:
-Dlog4j.configuration=/path/to/log4j.properties
-Dlogback.configurationFile=/path/to/logback.xml
logback"/"log4j
<!-- 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")
干杯
2条答案
按热度按时间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
. 如果你跑过这条线:更改为:
如果你有别的办法,请与我们分享。
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示例:在您的代码中(scala的例子与java的情况基本相同):
干杯