Flink任务自定义个性化配置logback.xml文件
之前已经写过如何使用logback将日志直接写入Kafka,然后通过es和kibana实时查看
但是如果我们想要每个任务都能够带上单独的信息比如开发者、任务名称等信息,那么就需要每个任务都指定一个logback文件,在这里将主要都步骤写一下
修改Logback源码,实现canal日志输出当前Ip地址和文件夹
1.直接修改logback-classic ch.qos.logback.classic.PatternLayout增加自定义变量
defaultConverterMap.put("developer", DeveloperConverter.class.getName()); defaultConverterMap.put("jobname", JobNameConverter.class.getName());
package ch.qos.logback.classic.pattern; import ch.qos.logback.classic.spi.ILoggingEvent; public class DeveloperConverter extends ClassicConverter { private static String developer = ""; static { try { developer = System.getProperty("developer"); } catch (Exception e) { System.out.println(e); } } public String convert(ILoggingEvent event) { return developer; } }
package ch.qos.logback.classic.pattern; import ch.qos.logback.classic.spi.ILoggingEvent; public class JobNameConverter extends ClassicConverter { private static String jobName = ""; static { try { jobName = System.getProperty("jobname"); } catch (Exception e) { System.out.println(e); } } public String convert(ILoggingEvent event) { return jobName; } }
2.任务启动的时候增加环境变量
-yD env.java.opts="-Ddeveloper=$dev_user -Djobname=$ynm"
其中$dev_user为任务开发者 $ynm为任务名称
这种方案有一点小问题就是 在启动的时候main线程获取不到上面的参数,但不影响大局。
另外下面这种方案不可行,只在启动的时候能够使用到自定义的配置,TM任务打出来的日志都是使用默认conf/logback.xml
1.在启动脚本中将配置文件写入到logback.xml
echo "" > logback.xml
2.修改flink框架启动脚本
vim flink-1.10.1/bin/flink
将这行注释
#log_setting=(-Dlog.file="$log" -Dlog4j.configuration=file:"$FLINK_CONF_DIR"/log4j-cli.properties -Dlogback.configurationFile=file:"$FLINK_CONF_DIR"/logback.xml)
加上这行
log_setting=(-Dlog.file="$log" -Dlog4j.configuration=file:"$FLINK_CONF_DIR"/log4j-cli.properties)
其实就是将-Dlogback.configurationFile=file:"$FLINK_CONF_DIR"/logback.xml去掉了
3.在任务启动命令增加配置项
-yD env.java.opts="-Dlogback.configurationFile=logback.xml"
4.将conf/下log4j.properties都移除掉
参考资料:
https://ci.apache.org/projects/flink/flink-docs-release-1.10/monitoring/logging.html#configuring-logback