Log4j2 中format增加自定義的參數


首先收藏一下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了。下面是輸出:

 

 

  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM