log4J2自定義pattern引數輸出
阿新 • • 發佈:2020-09-03
log4j2官網地址:http://logging.apache.org/log4j/2.x/manual/extending.html#PatternConverters
原文地址https://blog.csdn.net/hfismyangel/article/details/80182662
import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.pattern.ConverterKeys; import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; import org.apache.logging.log4j.core.pattern.PatternConverter; @Plugin(name = "TIDPatternConverter", category = PatternConverter.CATEGORY) @ConverterKeys({ "T", "TID" }) // public class TIDPatternConverter extends LogEventPatternConverter { private static final TIDPatternConverter INSTANCE = new TIDPatternConverter(); public static TIDPatternConverter newInstance( final String[] options) { return INSTANCE; } private TIDPatternConverter(){ super("TID", "TID"); } @Override public void format(LogEvent event, StringBuilder toAppendTo) { toAppendTo.append(Thread.currentThread().getId()); } }
定義一個類繼承LogEventPatternConverter
1.定義的這個類必須提供一個newInstance方法,引數是final String[] options,返回值為定義的類(對於是否是單例沒有明確的要求)
2.提供一個私有的建構函式,呼叫父類的建構函式,函式需要提供兩個引數 第一個引數是轉換器的名稱,第二個是css樣式,
3.還有主要的工作format,這裡有兩個引數,LogEvent是系統已經存在的一些可選資料,StringBuilder 表示的是最終的輸出字元流。一般都是將自定義的append進去
4.註解:Plugin 表示的是這是一個外掛,name是名稱,category為PatternConverter.CATEGORY(目前外掛只有這個選擇)ConverterKeys表示的就是自定義的引數,可以多個
定義好了之後,然後在log4j2的配置檔案中設定
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn" packages="com.hoperun.zhulongxiang.asnc_print_different_logfile"> <Appenders> <console name="console" target="system_out"> <!-- 只輸出level及以上級別的資訊(onmatch),其他的直接拒絕(onmismatch)。預設就是trace。 <thresholdfilter level="trace" onmatch="accept" onmismatch="deny"/> --> <patternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-10T] [%-5level] %l - %m%n" /> --用到自己定義的pattern :T </console> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="console" /> </Root> </Loggers> </Configuration>