Use log4j2-2.8.1 version,
Custom a FLayout below
Package com.com mon;
Import the Java. Nio. Charset. Charset;
Import the Java. Util. Arrays;
import java.util.Date;
import java.util.List;
The import org. Apache. Logging. Log4j. Core. Config. The Configuration;
The import org. Apache. Logging. Log4j. Core. Config. The Node;
The import org. Apache. Logging. Log4j. Core. Layout;
The import org. Apache. Logging. Log4j. Core. LogEvent;
The import org. Apache. Logging. Log4j. Core. Config. Plugins. The Plugin;
The import org. Apache. Logging. Log4j. Core. Config. Plugins. PluginAttribute;
The import org. Apache. Logging. Log4j. Core. Config. Plugins. PluginConfiguration;
The import org. Apache. Logging. Log4j. Core. Config. Plugins. PluginFactory;
The import org. Apache. Logging. Log4j. Core. Layout. AbstractStringLayout;
The import org. Apache. Logging. Log4j. Core. The pattern. LogEventPatternConverter;
The import org. Apache. Logging. Log4j. Core. The pattern. PatternFormatter;
The import org. Apache. Logging. Log4j. Core. The pattern. PatternParser;
@ the Plugin (name="FLayout", a category=Node. The category, elementType=Layout. ELEMENT_TYPE, printObject=true)
Public final class FLayout extends AbstractStringLayout {
Private static final String KEY="Converter";
Private final PatternSerializer fPatternSerializer;
Private FLayout (final Configuration config, final Charset Charset, final String pattern, final String headerPattern,
Final String footerPattern) {
Super (config, charset, new PatternSerializer (getPatternFormatter (config, headerPattern)),
New PatternSerializer (getPatternFormatter (config, footerPattern)));
Enclosing fPatternSerializer=new PatternSerializer (getPatternFormatter (config, pattern));
}
@ PluginFactory
Public static FLayout createLayout (@ PluginConfiguration final Configuration config,
@ PluginAttribute (value="https://bbs.csdn.net/topics/charset", defaultString="utf-8") final Charset Charset,
@ PluginAttribute (" pattern ") String pattern,
@ PluginAttribute (" header ") String headerPattern,
@ PluginAttribute (" footer ") String footerPattern) {
If (the pattern==null) {
The pattern="% d {yyyy/MM/dd HH: MM: ss. The SSS} : % m % n";
}
If (headerPattern==null) {
HeaderPattern="% m % n";
}
If (footerPattern==null) {
FooterPattern="% m % n";
}
Return new FLayout (config, charset, pattern, headerPattern, footerPattern);
}
@ Override
Public String toSerializable (final LogEvent event) {
Return this. FPatternSerializer. ToSerializable (event);
}
Public static PatternFormatter [] getPatternFormatter (final Configuration config, final String pattern) {
Final PatternParser parser=createPatternParser (config);
Final ListList=parser. Parse (pattern);
Final PatternFormatter [] formatters=list. ToArray (new PatternFormatter [0]).
Return formatters.
}
Public static PatternParser createPatternParser (final Configuration config) {
If (config==null) {
Return new PatternParser (config, KEY, LogEventPatternConverter. Class);
}
PatternParser parser=config. GetComponent (KEY);
If (parser==null) {
Parser=new PatternParser (config, KEY, LogEventPatternConverter. Class);
Config. AddComponent (KEY, parser);
Parser=config. GetComponent (KEY);
}
Return parser.
}
@ Override
Public byte [] toByteArray (LogEvent loge) {
{if ((loge==null))
return null;
}
String formatLoge=toSerializable (loge);
Return formatLoge. GetBytes ();
}
}
package com.com mon;
Import the Java. Util. Arrays;
The import org. Apache. Logging. Log4j. Core. LogEvent;
The import org. Apache. Logging. Log4j. Core. Layout. AbstractStringLayout. Serializer;
The import org. Apache. Logging. Log4j. Core. Layout. AbstractStringLayout. Serializer2;
The import org. Apache. Logging. Log4j. Core. The pattern. PatternFormatter;
The import org. Apache. Logging. Log4j. Util. PropertiesUtil;
Public class PatternSerializer implements Serializer, Serializer2 {
Public final PatternFormatter [] formatters;
Public PatternSerializer (final PatternFormatter formatters) [] {
super();
Enclosing formatters=formatters;
}
Protected the static final ints DEFAULT_STRING_BUILDER_SIZE=1024;
Protected the static final ints MAX_STRING_BUILDER_SIZE=Math. Max (DEFAULT_STRING_BUILDER_SIZE,
The size (" log4j layoutStringBuilder maxSize ", 2 * 1024));
Private static final ThreadLocalThreadLocal=new ThreadLocal<> (a);
/* *
* Returns a {@ code StringBuilder} that this Layout implementation can use to write the formatted log event to.
*
* @ return a {@ code StringBuilder}
*/
Protected the static StringBuilder getStringBuilder () {
nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull