使用log4j2的過(guò)程中,日志是安裝固定格式輸出的。這個(gè)格式是pattern所定義的,例如
%d{dd MMM yyyy HH:mm:ss,SSS}: %m%n
但是在有些情況下,想在輸出日志時(shí),使用不同的pattern。例如在正常輸出日志時(shí),使用系統(tǒng)默認(rèn)的pattern,在輸出spark任務(wù)的運(yùn)行信息時(shí),因?yàn)閟park任務(wù)的運(yùn)行結(jié)果已經(jīng)使用了log4j的pattern,如果再加上多余的pattern,會(huì)顯得非常冗余,因此我們只需要使用%m%n即可。
這時(shí)可以采用以下方式設(shè)置log4j2
<RollingFile name="rollingFile" fileName="${dir}/smarket-gateway.log"
filePattern="${dir}/smarket-gateway-%i.log">
<PatternLayout>
<MarkerPatternSelector defaultPattern="${pattern}">
<PatternMatch key="spark" pattern="%m%n"/>
</MarkerPatternSelector>
</PatternLayout>
<SizeBasedTriggeringPolicy size="10 MB"/>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
表示輸出日志時(shí),默認(rèn)使用一個(gè)默認(rèn)pattern,在遇到key是spark時(shí),使用%m%n這個(gè)pattern。
需要輸出log時(shí),可以添加marker,maker匹配后即可使用相應(yīng)的pattern進(jìn)行日志輸出
private val SPARK_MARKER = MarkerFactory.getMarker("spark")
logger.info(SPARK_MARKER, "this is spark log")
這樣spark的輸出信息在我們的日志文件中出現(xiàn)后,顯示的非常自然。