首先收藏一下log4j2的官網:http://logging.apache.org/log4j/2.x/manual/plugins.html#TypeConverters
對於這種需要,可以使用log4j2插件機制。
具體做法:
package com.hotusm.ticket.interceptor; 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; /** * Created by hotusm 2017/2/16. */ @Plugin(name = "LogIdPatternConverter", category = PatternConverter.CATEGORY) @ConverterKeys({ "y", "logId" }) public class LogIdPatternConverter extends LogEventPatternConverter { private static final LogIdPatternConverter INSTANCE = new LogIdPatternConverter(); public static LogIdPatternConverter newInstance( final String[] options) { return INSTANCE; } private LogIdPatternConverter(){ super("LogId", "logId"); } @Override public void format(LogEvent event, StringBuilder toAppendTo) { toAppendTo.append(Math.random()); } }
定義一個類繼承LogEventPatternConverter
1.定義的這個類必須提供一個newInstance方法,參數是final String[] options,返回值為定義的類(對於是否是單例沒有明確的要求)
2.提供一個私有的構造函數,調用父類的構造函數,函數需要提供兩個參數 第一個參數是轉換器的名稱,第二個是css樣式,
3.還有主要的工作format,這里有兩個參數,LogEvent是系統已經存在的一些可選數據,StringBuilder 表示的是最終的輸出字符流。一般都是將自定義的
append進去
4.注解:Plugin 表示的是這是一個插件,name是名稱,category為PatternConverter.CATEGORY(目前插件只有這個選擇)
ConverterKeys表示的就是自定義的參數,可以多個
定義好了之后,然后在log4j2的配置文件中設置
<configuration status="WARN" packages="com.hotusm.ticket.interceptor">
打印格式:
<Property name="patternStyle">lodId:%-10y %d{HH:mm:ss.SSS}
最后就ok了。下面是輸出: