Class MapMessage<M extends MapMessage<M,V>,V>

java.lang.Object
org.apache.logging.log4j.message.MapMessage<M,V>
Type Parameters:
M - Allow subclasses to use fluent APIs and override methods that return instances of subclasses.
V - The value type
All Implemented Interfaces:
Serializable, Message, MultiformatMessage, MultiFormatStringBuilderFormattable, StringBuilderFormattable
Direct Known Subclasses:
StringMapMessage, StructuredDataMessage

@AsynchronouslyFormattable public class MapMessage<M extends MapMessage<M,V>,V> extends Object implements MultiFormatStringBuilderFormattable
Represents a Message that consists of a Map.

Thread-safety note: the contents of this message can be modified after construction. When using asynchronous loggers and appenders it is not recommended to modify this message after the message is logged, because it is undefined whether the logged message string will contain the old values or the modified values.

This class was pulled up from StringMapMessage to allow for Objects as values.

See Also:
  • Constructor Details

    • MapMessage

      public MapMessage()
      Constructs a new instance.
    • MapMessage

      public MapMessage(int initialCapacity)
      Constructs a new instance.
      Parameters:
      initialCapacity - the initial capacity.
    • MapMessage

      public MapMessage(Map<String,V> map)
      Constructs a new instance based on an existing Map.
      Parameters:
      map - The Map.
  • Method Details

    • getFormats

      public String[] getFormats()
      Description copied from interface: MultiformatMessage
      Returns the supported formats.
      Specified by:
      getFormats in interface MultiformatMessage
      Returns:
      The supported formats.
    • getParameters

      public Object[] getParameters()
      Returns the data elements as if they were parameters on the logging event.
      Specified by:
      getParameters in interface Message
      Returns:
      the data elements.
    • getFormat

      public String getFormat()
      Returns the message.
      Specified by:
      getFormat in interface Message
      Returns:
      the message.
    • getData

      public Map<String,V> getData()
      Returns the message data as an unmodifiable Map.
      Returns:
      the message data as an unmodifiable map.
    • getIndexedReadOnlyStringMap

      public IndexedReadOnlyStringMap getIndexedReadOnlyStringMap()
      Returns a read-only view of the message data.
      Returns:
      the read-only message data.
    • clear

      public void clear()
      Clear the data.
    • containsKey

      public boolean containsKey(String key)
      Returns true if this data structure contains the specified key, false otherwise.
      Parameters:
      key - the key whose presence to check. May be null.
      Returns:
      true if this data structure contains the specified key, false otherwise
      Since:
      2.9
    • put

      public void put(String candidateKey, String value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
    • putAll

      public void putAll(Map<String,String> map)
      Adds all the elements from the specified Map.
      Parameters:
      map - The Map to add.
    • get

      public String get(String key)
      Retrieves the value of the element with the specified key or null if the key is not present.
      Parameters:
      key - The name of the element.
      Returns:
      The value of the element or null if the key is not present.
    • remove

      public String remove(String key)
      Removes the element with the specified name.
      Parameters:
      key - The name of the element.
      Returns:
      The previous value of the element.
    • asString

      public String asString()
      Formats the Structured data as described in RFC 5424.
      Returns:
      The formatted String.
    • asString

      public String asString(String format)
      Formats the Structured data as described in RFC 5424.
      Parameters:
      format - The format identifier.
      Returns:
      The formatted String.
    • forEach

      public <CV> void forEach(BiConsumer<String,? super CV> action)
      Performs the given action for each key-value pair in this data structure until all entries have been processed or the action throws an exception.

      Some implementations may not support structural modifications (adding new elements or removing elements) while iterating over the contents. In such implementations, attempts to add or remove elements from the BiConsumer's BiConsumer.accept(Object, Object) accept} method may cause a ConcurrentModificationException to be thrown.

      Type Parameters:
      CV - type of the consumer value
      Parameters:
      action - The action to be performed for each key-value pair in this collection
      Throws:
      ConcurrentModificationException - some implementations may not support structural modifications to this data structure while iterating over the contents with forEach(BiConsumer) or forEach(TriConsumer, Object).
      Since:
      2.9
      See Also:
    • forEach

      public <CV, S> void forEach(TriConsumer<String,? super CV,S> action, S state)
      Performs the given action for each key-value pair in this data structure until all entries have been processed or the action throws an exception.

      The third parameter lets callers pass in a stateful object to be modified with the key-value pairs, so the TriConsumer implementation itself can be stateless and potentially reusable.

      Some implementations may not support structural modifications (adding new elements or removing elements) while iterating over the contents. In such implementations, attempts to add or remove elements from the TriConsumer's accept method may cause a ConcurrentModificationException to be thrown.

      Type Parameters:
      CV - type of the consumer value
      S - type of the third parameter
      Parameters:
      action - The action to be performed for each key-value pair in this collection
      state - the object to be passed as the third parameter to each invocation on the specified triconsumer
      Throws:
      ConcurrentModificationException - some implementations may not support structural modifications to this data structure while iterating over the contents with forEach(BiConsumer) or forEach(TriConsumer, Object).
      Since:
      2.9
      See Also:
    • asXml

      public void asXml(StringBuilder sb)
      Formats this message as an XML fragment String into the given builder.
      Parameters:
      sb - format into this builder.
    • getFormattedMessage

      public String getFormattedMessage()
      Formats the message and return it.
      Specified by:
      getFormattedMessage in interface Message
      Returns:
      the formatted message.
    • getFormattedMessage

      public String getFormattedMessage(String[] formats)
      Description copied from interface: MultiformatMessage
      Returns the Message formatted as a String.
      Specified by:
      getFormattedMessage in interface MultiformatMessage
      Parameters:
      formats - An array of Strings that provide extra information about how to format the message. MapMessage uses the first format specifier it recognizes. The supported formats are XML, JSON, and JAVA. The default format is key1="value1" key2="value2" as required by RFC 5424 messages.
      Returns:
      The formatted message.
    • appendMap

      protected void appendMap(StringBuilder sb)
    • asJson

      protected void asJson(StringBuilder sb)
    • asJavaUnquoted

      protected void asJavaUnquoted(StringBuilder sb)
    • asJava

      protected void asJava(StringBuilder sb)
    • newInstance

      public M newInstance(Map<String,V> map)
      Constructs a new instance based on an existing Map.
      Parameters:
      map - The Map.
      Returns:
      A new MapMessage
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • formatTo

      public void formatTo(StringBuilder buffer)
      Description copied from interface: StringBuilderFormattable
      Writes a text representation of this object into the specified StringBuilder, ideally without allocating temporary objects.
      Specified by:
      formatTo in interface StringBuilderFormattable
      Parameters:
      buffer - the StringBuilder to write into
    • formatTo

      public void formatTo(String[] formats, StringBuilder buffer)
      Description copied from interface: MultiFormatStringBuilderFormattable
      Writes a text representation of this object into the specified StringBuilder, ideally without allocating temporary objects.
      Specified by:
      formatTo in interface MultiFormatStringBuilderFormattable
      Parameters:
      formats - An array of Strings that provide extra information about how to format the message. Each MultiFormatStringBuilderFormattable implementation is free to use the provided formats however they choose.
      buffer - the StringBuilder to write into
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • getThrowable

      public Throwable getThrowable()
      Always returns null.
      Specified by:
      getThrowable in interface Message
      Returns:
      null
    • validate

      protected void validate(String key, boolean value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, byte value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, char value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, double value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, float value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, int value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, long value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, Object value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, short value)
      Default implementation does nothing.
      Since:
      2.9
    • validate

      protected void validate(String key, String value)
      Default implementation does nothing.
      Since:
      2.9
    • toKey

      protected String toKey(String candidateKey)
      Allows subclasses to change a candidate key to an actual key.
      Parameters:
      candidateKey - The candidate key.
      Returns:
      The candidate key.
      Since:
      2.12
    • with

      public M with(String candidateKey, boolean value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, byte value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, char value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, double value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, float value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, int value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, long value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, Object value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, short value)
      Adds an item to the data Map.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this object
      Since:
      2.9
    • with

      public M with(String candidateKey, String value)
      Adds an item to the data Map in fluent style.
      Parameters:
      candidateKey - The name of the data item.
      value - The value of the data item.
      Returns:
      this