任務運行中的日志記錄下來是相當有必要的,而當我們想要查看輸入的日志並不是一件簡單的事情,盡管可以在flink ui上看logs和stdout,一旦日志量變大,這樣查看會異常的惡心。
flink conf中提供了log4j和logback配置文件,默認情況下使用的是log4j,因為log4j不支持公司郵箱的認證方式,所以在這里選用優秀的logback。
在lib文件夾下是沒有logback依賴jar包的,所以需要增加
logback-access-1.2.3.jar
logback-classic-1.2.3.jar
logback-core-1.2.3.jar
mail-1.4.7.jar

然后修改conf下logback-console.xml logback.xml logback-yarn.xml 三個文件
主要是增加 發郵件的appender
<!-- 郵件發送的appender -->
<appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.partner.outlook.cn</smtpHost>
<smtpPort>587</smtpPort>
<username>xx@xx.com</username>
<password></password>
<asynchronousSending>false</asynchronousSending>
<SSL>false</SSL>
<STARTTLS>true</STARTTLS>
<to>xx@xx.com</to>
<from>xx@xx.com</from>
<subject>flink異常郵件</subject>
<!-- html格式 -->
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<Pattern>%date%level%thread%logger{0}%line%message</Pattern>
</layout>
<!-- 這里采用等級過濾器 指定等級相符才發送 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
</filter>
<!-- 每個電子郵件只發送40個日志條目 -->
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>40</bufferSize>
</cyclicBufferTracker>
</appender>
<root level="INFO">
<appender-ref ref="Email"/>
</root>
這樣flink配置就完成了。
在開發應用的時候,如果想要記錄日志信息,需要添加slf4j和logback依賴並排除log4j的依賴(切記),那么記錄的error信息,就直接會發到配置的郵箱


正常來說,偶爾幾個錯誤發出來完成沒有問題,但是一旦出現比較嚴重的錯誤,比如某個組件出現了故障,那么在實時任務中需要發出來的郵件可能就有數十萬,很有可能將公司郵箱打爆。
基於這種情況,將buffersize調大能起到一定作用,但是解決不了根本,可以參考我的另一篇文章 Flink日志接入ELK 根本性的解決這個問題。
