Class StringBuilderEncoder
java.lang.Object
org.apache.logging.log4j.core.layout.StringBuilderEncoder
- All Implemented Interfaces:
Encoder<StringBuilder>
Encoder for StringBuilders that uses ThreadLocals to avoid locking as much as possible.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int
private final int
private final Charset
private static final int
private final ThreadLocal<Object[]>
This ThreadLocal uses raw and inconvenient Object[] to store three heterogeneous objects (CharEncoder, CharBuffer and ByteBuffer) instead of a custom class, because it needs to contain JDK classes, no custom (Log4j) classes. -
Constructor Summary
ConstructorsConstructorDescriptionStringBuilderEncoder
(Charset charset) StringBuilderEncoder
(Charset charset, int charBufferSize, int byteBufferSize) -
Method Summary
Modifier and TypeMethodDescriptionvoid
encode
(StringBuilder source, ByteBufferDestination destination) Encodes the specified source object to some binary representation and writes the result to the specified destination.private Object[]
private void
logEncodeTextException
(Exception ex, StringBuilder text, ByteBufferDestination destination)
-
Field Details
-
DEFAULT_BYTE_BUFFER_SIZE
private static final int DEFAULT_BYTE_BUFFER_SIZE- See Also:
-
threadLocal
This ThreadLocal uses raw and inconvenient Object[] to store three heterogeneous objects (CharEncoder, CharBuffer and ByteBuffer) instead of a custom class, because it needs to contain JDK classes, no custom (Log4j) classes. Where possible putting only JDK classes in ThreadLocals is preferable to avoid memory leaks in web containers: the Log4j classes may be loaded by a separate class loader which cannot be garbage collected if a thread pool threadlocal still has a reference to it. Using just one ThreadLocal instead of three separate ones is an optimization:ThreadLocal.ThreadLocalMap
is polluted less,ThreadLocal.ThreadLocalMap#get()
is called only once on each call toencode(java.lang.StringBuilder, org.apache.logging.log4j.core.layout.ByteBufferDestination)
instead of three times. -
charset
-
charBufferSize
private final int charBufferSize -
byteBufferSize
private final int byteBufferSize
-
-
Constructor Details
-
StringBuilderEncoder
-
StringBuilderEncoder
-
-
Method Details
-
encode
Description copied from interface:Encoder
Encodes the specified source object to some binary representation and writes the result to the specified destination.- Specified by:
encode
in interfaceEncoder<StringBuilder>
- Parameters:
source
- the object to encode.destination
- holds the ByteBuffer to write into.
-
getThreadLocalState
-
logEncodeTextException
private void logEncodeTextException(Exception ex, StringBuilder text, ByteBufferDestination destination)
-