长沙Java培训班的小编这一期给大家讲Log4j2中format增加自定义的参数。
对于这种需要,可以使用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
ewInstance(
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的配置文件中设置
status="WARN" packages="com.hotusm.ticket.interceptor">
打印格式:
ame="patternStyle">lodId:%-10y %d{HH:mm:ss.SSS}
这样就可以了。