1. 程式人生 > 實用技巧 >log4J2自定義pattern引數輸出

log4J2自定義pattern引數輸出

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>