之前已經寫過如何使用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