<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.1 from src/site/xdoc/manual/messages.xml at 2020-05-10
 | Rendered using Apache Maven Fluido Skin 1.8
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.9.1" />
    <meta name="author" content="Ralph Goers" />
    <title>Log4j &#x2013; Log4j 2 API Messages</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.8.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
    <script src="../js/apache-maven-fluido-1.8.min.js"></script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <header>
        <div id="banner">
          <div class="pull-left"><a href="http://logging.apache.org" id="bannerLeft"><img src="../images/ls-logo.jpg"  alt=""/></a></div>
          <div class="pull-right"><a href="http://logging.apache.org/log4j/2.x" id="bannerRight"><img src="../images/logo.png"  alt=""/></a></div>
          <div class="clear"><hr/></div>
        </div>

        <div id="breadcrumbs">
          <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2020-05-10<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 2.13.3</li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://github.com/apache/logging-log4j2" class="externalLink" title="GitHub">GitHub</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://analysis.apache.org/dashboard/index/org.apache.logging.log4j:log4j" class="externalLink" title="Sonar">Sonar</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="../../../" title="Logging Services">Logging Services</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://www.apache.org/" class="externalLink" title="Apache">Apache</a></li>
      <li class="pull-right"><a href="https://cwiki.apache.org/confluence/display/LOGGING/Log4j" class="externalLink" title="Logging Wiki">Logging Wiki</a></li>
          </ul>
        </div>
      </header>
      <div class="row-fluid">
        <header id="leftColumn" class="span2">
          <nav class="well sidebar-nav">
  <ul class="nav nav-list">
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/home.png" alt="Apache Log4j™ 2" border="0"/> Apache Log4j™ 2</li>
    <li><a href="../index.html" title="About"><span class="none"></span>About</a></li>
    <li><a href="../download.html" title="Download"><span class="none"></span>Download</a></li>
    <li><a href="../javadoc.html" title="Javadoc"><span class="icon-chevron-right"></span>Javadoc</a></li>
    <li><a href="../maven-artifacts.html" title="Maven, Ivy, Gradle Artifacts"><span class="icon-chevron-right"></span>Maven, Ivy, Gradle Artifacts</a></li>
    <li><a href="../runtime-dependencies.html" title="Runtime Dependencies"><span class="none"></span>Runtime Dependencies</a></li>
    <li><a href="../changelog.html" title="Changelog"><span class="none"></span>Changelog</a></li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a></li>
    <li><a href="../performance.html" title="Performance"><span class="icon-chevron-right"></span>Performance</a></li>
    <li><a href="../articles.html" title="Articles and Tutorials"><span class="none"></span>Articles and Tutorials</a></li>
    <li><a href="../security.html" title="Security"><span class="none"></span>Security</a></li>
    <li><a href="../support.html" title="Support"><span class="none"></span>Support</a></li>
    <li><a href="../thanks.html" title="Thanks"><span class="none"></span>Thanks</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/pencil.png" alt="For Contributors" border="0"/> For Contributors</li>
    <li><a href="../build.html" title="Building Log4j from Source"><span class="none"></span>Building Log4j from Source</a></li>
    <li><a href="../guidelines.html" title="Guidelines"><span class="none"></span>Guidelines</a></li>
    <li><a href="../javastyle.html" title="Style Guide"><span class="none"></span>Style Guide</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/book.png" alt="Manual" border="0"/> Manual</li>
    <li><a href="../manual/index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
    <li><a href="../manual/architecture.html" title="Architecture"><span class="none"></span>Architecture</a></li>
    <li><a href="../manual/compatibility.html" title="Log4j 1.x Compatibility"><span class="none"></span>Log4j 1.x Compatibility</a></li>
    <li><a href="../manual/migration.html" title="Log4j 1.x Migration"><span class="none"></span>Log4j 1.x Migration</a></li>
    <li><a href="../manual/api.html" title="Java API"><span class="icon-chevron-down"></span>Java API</a>
     <ul class="nav nav-list">
      <li><a href="../manual/logbuilder.html" title="Log Builder"><span class="none"></span>Log Builder</a></li>
      <li><a href="../manual/flowtracing.html" title="Flow Tracing"><span class="none"></span>Flow Tracing</a></li>
      <li><a href="../manual/markers.html" title="Markers"><span class="none"></span>Markers</a></li>
      <li><a href="../manual/eventlogging.html" title="Event Logging"><span class="none"></span>Event Logging</a></li>
      <li class="active"><a href="#"><span class="none"></span>Messages</a></li>
      <li><a href="../manual/thread-context.html" title="ThreadContext"><span class="none"></span>ThreadContext</a></li>
     </ul></li>
    <li><a href="../manual/scala-api.html" title="Scala API"><span class="none"></span>Scala API</a></li>
    <li><a href="../manual/configuration.html" title="Configuration"><span class="icon-chevron-right"></span>Configuration</a></li>
    <li><a href="../manual/usage.html" title="Usage"><span class="icon-chevron-right"></span>Usage</a></li>
    <li><a href="../manual/webapp.html" title="Web Applications and JSPs"><span class="icon-chevron-right"></span>Web Applications and JSPs</a></li>
    <li><a href="../manual/lookups.html" title="Lookups"><span class="icon-chevron-right"></span>Lookups</a></li>
    <li><a href="../manual/appenders.html" title="Appenders"><span class="icon-chevron-right"></span>Appenders</a></li>
    <li><a href="../manual/layouts.html" title="Layouts"><span class="icon-chevron-right"></span>Layouts</a></li>
    <li><a href="../manual/filters.html" title="Filters"><span class="icon-chevron-right"></span>Filters</a></li>
    <li><a href="../manual/async.html" title="Async Loggers"><span class="icon-chevron-right"></span>Async Loggers</a></li>
    <li><a href="../manual/garbagefree.html" title="Garbage-free Logging"><span class="icon-chevron-right"></span>Garbage-free Logging</a></li>
    <li><a href="../manual/jmx.html" title="JMX"><span class="none"></span>JMX</a></li>
    <li><a href="../manual/logsep.html" title="Logging Separation"><span class="none"></span>Logging Separation</a></li>
    <li><a href="../manual/extending.html" title="Extending Log4j"><span class="icon-chevron-right"></span>Extending Log4j</a></li>
    <li><a href="../manual/plugins.html" title="Plugins"><span class="icon-chevron-right"></span>Plugins</a></li>
    <li><a href="../manual/customconfig.html" title="Programmatic Log4j Configuration"><span class="icon-chevron-right"></span>Programmatic Log4j Configuration</a></li>
    <li><a href="../manual/customloglevels.html" title="Custom Log Levels"><span class="icon-chevron-right"></span>Custom Log Levels</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/tag.png" alt="Related Projects" border="0"/> Related Projects</li>
    <li><a href="http://logging.apache.org/log4j/scala/index.html" class="externalLink" title="Log4j-Scala"><span class="none"></span>Log4j-Scala</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/link.png" alt="Legacy Sites" border="0"/> Legacy Sites</li>
    <li><a href="http://logging.apache.org/log4j/1.2/" class="externalLink" title="Log4j 1.2 - End of Life"><span class="none"></span>Log4j 1.2 - End of Life</a></li>
    <li><a href="http://logging.apache.org/log4j/log4j-2.3/" class="externalLink" title="Log4j 2.3 - Java 6"><span class="none"></span>Log4j 2.3 - Java 6</a></li>
    <li><a href="http://logging.apache.org/log4j/log4j-2.12.1" class="externalLink" title="Log4j 2.12.1 - Java 7"><span class="none"></span>Log4j 2.12.1 - Java 7</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/cog.png" alt="Components" border="0"/> Components</li>
    <li><a href="../log4j-api/index.html" title="API"><span class="none"></span>API</a></li>
    <li><a href="../log4j-core/index.html" title="Implementation"><span class="none"></span>Implementation</a></li>
    <li><a href="../log4j-jcl/index.html" title="Commons Logging Bridge"><span class="none"></span>Commons Logging Bridge</a></li>
    <li><a href="../log4j-1.2-api/index.html" title="Log4j 1.2 API"><span class="none"></span>Log4j 1.2 API</a></li>
    <li><a href="../log4j-slf4j-impl/index.html" title="SLF4J Binding"><span class="none"></span>SLF4J Binding</a></li>
    <li><a href="../log4j-jul/index.html" title="JUL Adapter"><span class="none"></span>JUL Adapter</a></li>
    <li><a href="../log4j-jpl/index.html" title="JDK Platform Logger"><span class="none"></span>JDK Platform Logger</a></li>
    <li><a href="../log4j-to-slf4j/index.html" title="Log4j 2 to SLF4J Adapter"><span class="none"></span>Log4j 2 to SLF4J Adapter</a></li>
    <li><a href="../log4j-flume-ng/index.html" title="Apache Flume Appender"><span class="none"></span>Apache Flume Appender</a></li>
    <li><a href="../log4j-taglib/index.html" title="Log4j Tag Library"><span class="none"></span>Log4j Tag Library</a></li>
    <li><a href="../log4j-jmx-gui/index.html" title="Log4j JMX GUI"><span class="none"></span>Log4j JMX GUI</a></li>
    <li><a href="../log4j-web/index.html" title="Log4j Web Application Support"><span class="none"></span>Log4j Web Application Support</a></li>
    <li><a href="../log4j-appserver/index.html" title="Log4j Application Server Integration"><span class="none"></span>Log4j Application Server Integration</a></li>
    <li><a href="../log4j-couchdb/index.html" title="Log4j CouchDB appender"><span class="none"></span>Log4j CouchDB appender</a></li>
    <li><a href="../log4j-mongodb2/index.html" title="Log4j MongoDB2 appender"><span class="none"></span>Log4j MongoDB2 appender</a></li>
    <li><a href="../log4j-mongodb3/index.html" title="Log4j MongoDB3 appender"><span class="none"></span>Log4j MongoDB3 appender</a></li>
    <li><a href="../log4j-cassandra/index.html" title="Log4j Cassandra appender"><span class="none"></span>Log4j Cassandra appender</a></li>
    <li><a href="../log4j-iostreams/index.html" title="Log4j IO Streams"><span class="none"></span>Log4j IO Streams</a></li>
    <li><a href="../log4j-liquibase/index.html" title="Log4j Liquibase Binding"><span class="none"></span>Log4j Liquibase Binding</a></li>
    <li><a href="../log4j-docker/index.html" title="Log4j Docker Support"><span class="none"></span>Log4j Docker Support</a></li>
    <li><a href="../log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html" title="Log4j Spring Cloud Config Client"><span class="none"></span>Log4j Spring Cloud Config Client</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/info.png" alt="Project Information" border="0"/> Project Information</li>
    <li><a href="../dependency-convergence.html" title="Dependency Convergence"><span class="none"></span>Dependency Convergence</a></li>
    <li><a href="../dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a></li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a></li>
    <li><a href="../license.html" title="Project License"><span class="none"></span>Project License</a></li>
    <li><a href="../source-repository.html" title="Source Repository"><span class="none"></span>Source Repository</a></li>
    <li><a href="../project-summary.html" title="Project Summary"><span class="none"></span>Project Summary</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/layers.png" alt="Project Reports" border="0"/> Project Reports</li>
    <li><a href="../changes-report.html" title="Changes Report"><span class="none"></span>Changes Report</a></li>
    <li><a href="../jira-report.html" title="JIRA Report"><span class="none"></span>JIRA Report</a></li>
    <li><a href="../rat-report.html" title="RAT Report"><span class="none"></span>RAT Report</a></li>
  </ul>
          </nav>
          <div class="well sidebar-nav">
            <hr />
            <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
            </div>
          </div>
        </header>
        <main id="bodyColumn"  class="span10" >

  
    <section>
<h2><a name="Log4j_2_API"></a>Log4j 2 API</h2>
      <section>
<h3><a name="Messages"></a>Messages</h3>
        <a name="Messages"></a>
        
<p>
          Although Log4j 2 provides Logger methods that accept Strings and Objects, all of these are ultimately
          captured in Message objects that are then associated with the log event. Applications are free to
          construct Messages of their own and pass them to the Logger. Although it may seem more expensive than
          passing the message format and parameters directly to the event, testing has shown that with modern
          JVMs the cost of creating and destroying events is minor, especially when complex tasks are encapsulated
          in the Message instead of the application. In addition, when using the methods that accept Strings and
          parameters, the underlying Message object will only be created if any configured global filters
          or the Logger's log level allow the message to be processed.
        </p>
        
<p>
          Consider an application that has a Map object containing {&quot;Name&quot; = &quot;John Doe&quot;, &quot;Address&quot; = &quot;123 Main
          St.&quot;,
          &quot;Phone&quot; = &quot;(999) 555-1212&quot;} and a User object that has a getId method that returns &quot;jdoe&quot;. The developer
          would like to add an informational message that returns &quot;User John Doe has logged in using id jdoe&quot;. The
          way this could be accomplished is by doing:
        </p>
        
<div>
<pre class="prettyprint">logger.info(&quot;User {} has logged in using id {}&quot;, map.get(&quot;Name&quot;), user.getId());</pre></div>
        
<p>
          While there is nothing inherently wrong with this, as the complexity of the objects and desired output
          increases this technique becomes harder to use. As an alternative, using Messages allows:
        </p>
        
<div>
<pre class="prettyprint">logger.info(new LoggedInMessage(map, user));</pre></div>
        
<p>
          In this alternative the formatting is delegated to the LoggedInMessage object's getFormattedMessage
          method.
          Although in this alternative a new object is created, none of the methods on the objects passed to the
          LoggedInMessage are invoked until the LoggedInMessage is formatted. This is especially useful when an
          Object's toString method does not produce the information you would like to appear in the log.
        </p>
        
<p>
          Another advantage to Messages is that they simplify writing Layouts. In other logging frameworks the
          Layout must loop through the parameters individually and determine what to do based on what objects
          are encountered. With Messages the Layout has the option of delegating the formatting to the Message or
          performing its formatting based on the type of Message encountered.
        </p>
        
<p>
          Borrowing from the earlier example illustrating Markers to identify SQL statements being logged, Messages
          can also be leveraged. First, the Message is defined.
        </p>
        
<div>
<pre class="prettyprint linenums">
public class SQLMessage implements Message {
  public enum SQLType {
      UPDATE,
      QUERY
  };

  private final SQLType type;
  private final String table;
  private final Map&lt;String, String&gt; cols;

  public SQLMessage(SQLType type, String table) {
      this(type, table, null);
  }

  public SQLMessage(SQLType type, String table, Map&lt;String, String&gt; cols) {
      this.type = type;
      this.table = table;
      this.cols = cols;
  }

  public String getFormattedMessage() {
      switch (type) {
          case UPDATE:
            return createUpdateString();
            break;
          case QUERY:
            return createQueryString();
            break;
          default;
      }
  }

  public String getMessageFormat() {
      return type + &quot; &quot; + table;
  }

  public Object getParameters() {
      return cols;
  }

  private String createUpdateString() {
  }

  private String createQueryString() {
  }

  private String formatCols(Map&lt;String, String&gt; cols) {
      StringBuilder sb = new StringBuilder();
      boolean first = true;
      for (Map.Entry&lt;String, String&gt; entry : cols.entrySet()) {
          if (!first) {
              sb.append(&quot;, &quot;);
          }
          sb.append(entry.getKey()).append(&quot;=&quot;).append(entry.getValue());
          first = false;
      }
      return sb.toString();
  }
}</pre></div>
      
<p>
        Next we can use the message in our application.
      </p>
        
<div>
<pre class="prettyprint linenums">
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.util.Map;

public class MyApp {

    private Logger logger = LogManager.getLogger(MyApp.class.getName());
    private static final Marker SQL_MARKER = MarkerManager.getMarker(&quot;SQL&quot;);
    private static final Marker UPDATE_MARKER = MarkerManager.getMarker(&quot;SQL_UPDATE&quot;, SQL_MARKER);
    private static final Marker QUERY_MARKER = MarkerManager.getMarker(&quot;SQL_QUERY&quot;, SQL_MARKER);

    public String doQuery(String table) {
        logger.entry(param);

        logger.debug(QUERY_MARKER, new SQLMessage(SQLMessage.SQLType.QUERY, table));

        return logger.exit();
    }

    public String doUpdate(String table, Map&lt;String, String&gt; params) {
        logger.entry(param);

        logger.debug(UPDATE_MARKER, new SQLMessage(SQLMessage.SQLType.UPDATE, table, parmas);

        return logger.exit();
    }
}</pre></div>
        
<p>
          Notice that in contrast to the prior version of this example, the logger.debug in doUpdate no longer
          needs to be wrapped in an isDebugEnabled call as creation of the SQLMessage is on the same order of
          magnitude of performing that check. Furthermore, all the formatting of the SQL columns is now hidden
          in the SQLMessage instead of having to take place in the business logic. Finally, if desired, Filters
          and/or Layouts can be written to take special action when an SQLMessage is encountered.
        </p>
      <section>
<h4><a name="FormattedMessage"></a>FormattedMessage</h4>
        <a name="FormattedMessage"></a>
        
<p>
          The message pattern passed to a
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/FormattedMessage.html" class="javadoc">FormattedMessage</a>
          is first checked to see if it is a valid java.text.MessageFormat pattern. If it is, a MessageFormatMessage is
          used to format it. If not it is next checked to see if it contains any tokens that are valid format
          specifiers for String.format(). If so, a StringFormattedMessage is used to format it. Finally, if the
          pattern doesn't match either of those then a ParameterizedMessage is used to format it.
        </p>
      </section><section>
<h4><a name="LocalizedMessage"></a>LocalizedMessage</h4>
        <a name="LocalizedMessage"></a>
        
<p>
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/LocalizedMessage.html" class="javadoc">LocalizedMessage</a>
          is provided primarily to provide compatibility with Log4j 1.x. Generally,
          the best approach to localization is to have the client UI render the events in the client's locale.
        </p>
        
<p>
          LocalizedMessage incorporates a ResourceBundle and allows the message pattern parameter to be the key to
          the message pattern in the bundle. If no bundle is specified,
          LocalizedMessage will attempt to locate a bundle with the name of the Logger used to log the event. The
          message retrieved from the bundle will be formatted using a FormattedMessage.
        </p>
      </section><section>
<h4><a name="LoggerNameAwareMessage"></a>LoggerNameAwareMessage</h4>
        <a name="LoggerNameAwareMessage"></a>
        
<p>
          LoggerNameAwareMessage is an interface with a setLoggerName method. This method will be called during
          event construction so that the Message has the name of the Logger used to log the event when the
          message is being formatted.
        </p>
      </section><section>
<h4><a name="MapMessage"></a>MapMessage</h4>
        <a name="MapMessage"></a>
        
<p>
          A MapMessage contains a Map of String keys and values. MapMessage implements 
          FormattedMessage and accepts format specifiers of &quot;XML&quot;, &quot;JSON&quot; or &quot;JAVA&quot;, in which case the Map
          will be formatted as XML, JSON or as documented by
          <a class="javadoc" href="https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html#toString()">java.util.AbstractMap.toString()</a>.
          Otherwise, the Map will be formatted as &quot;key1=value1 key2=value2 ...&quot;.
        </p>
        
<p>
          Some Appenders make special use of MapMessage objects: 
        </p>
        
<ul>
          
<li>
            When a <a href="appenders.html#JMSAppender">JMS Appender</a> is configured with a MessageLayout, it converts a Log4j 
            MapMessage to a JMS javax.jms.MapMessage.
          </li>
          
<li>
            When a <a href="appenders.html#JDBCAppender">JDBC Appender</a> is configured with a MessageLayout, it converts a Log4j 
            MapMessage to values in a SQL INSERT statement.
          </li>
          
<li>
            When a <a href="appenders.html#NoSQLAppenderMongoDB2">MongoDB2 Appender</a> or 
            <a href="appenders.html#NoSQLAppenderMongoDB3">MongoDB3 Appender</a> is configured with a MessageLayout, it converts a Log4j 
            MapMessage to fields in a MongoDB object. 
          </li>
        </ul>
        
<p>
          When an Appender is MessageLayout-aware, the object Log4j sends to target is not a Log4j Log 
          Event but a custom object.
        </p>
        </section><section>
<h4><a name="MessageFormatMessage"></a>MessageFormatMessage</h4>
        <a name="MessageFormatMessage"></a>
        
<p>
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/MessageFormatMessage.html" class="javadoc">MessageFormatMessage</a>
          handles messages that use a <a class="externalLink" href="https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html">conversion format</a>.
          While this Message has more flexibility than ParameterizedMessage, it is also about two times slower.
        </p>
      </section><section>
<h4><a name="MultiformatMessage"></a>MultiformatMessage</h4>
        <a name="MultiformatMessage"></a>
        
<p>
          A MultiformatMessage will have a getFormats method and a getFormattedMessage method that accepts and array
          of format Strings. The getFormats method may be called by a Layout to provide it information on what
          formatting options the Message supports. The Layout may then call getFormattedMessage with one or more
          for the formats. If the Message doesn't recognize the format name it will simply format the data using its
          default format. An example of this is the StructuredDataMessage which accepts a format String of &quot;XML&quot;
          which will cause it to format the event data as XML instead of the RFC 5424 format.
        </p>
      </section><section>
<h4><a name="ObjectMessage"></a>ObjectMessage</h4>
        <a name="ObjectMessage"></a>
        
<p>
          Formats an Object by calling its toString method. Since Log4j 2.6, Layouts trying to be low-garbage or
          garbage-free will call the formatTo(StringBuilder) method instead.
        </p>
      </section><section>
<h4><a name="ParameterizedMessage"></a>ParameterizedMessage</h4>
        <a name="ParameterizedMessage"></a>
        
<p>
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/ParameterizedMessage.html" class="javadoc">ParameterizedMessage</a>
          handles messages that contain &quot;{}&quot; in the format to represent replaceable tokens and the replacement
          parameters.
        </p>
      </section><section>
<h4><a name="ReusableObjectMessage"></a>ReusableObjectMessage</h4>
        <a name="ReusableObjectMessage"></a>
        
<p>
          In garbage-free mode, this message is used to pass logged Objects to the Layout and Appenders.
          Functionally equivalent to <a href="#ObjectMessage">ObjectMessage</a>.
        </p>
      </section><section>
<h4><a name="ReusableParameterizedMessage"></a>ReusableParameterizedMessage</h4>
        <a name="ReusableParameterizedMessage"></a>
        
<p>
          In garbage-free mode, this message is used to handle messages that contain &quot;{}&quot; in the format to
          represent replaceable tokens and the replacement parameters.
          Functionally equivalent to <a href="#ParameterizedMessage">ParameterizedMessage</a>.
        </p>
      </section><section>
<h4><a name="ReusableSimpleMessage"></a>ReusableSimpleMessage</h4>
        <a name="ReusableSimpleMessage"></a>
        
<p>
          In garbage-free mode, this message is used to pass logged Strings and CharSequences to the Layout and Appenders.
          Functionally equivalent to <a href="#SimpleMessage">SimpleMessage</a>.
        </p>
      </section><section>
<h4><a name="SimpleMessage"></a>SimpleMessage</h4>
        <a name="SimpleMessage"></a>
        
<p>
          SimpleMessage contains a String or CharSequence that requires no formatting.
        </p>
      </section><section>
<h4><a name="StringFormattedMessage"></a>StringFormattedMessage</h4>
        <a name="StringFormattedMessage"></a>
        
<p>
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/StringFormattedMessage.html" class="javadoc">StringFormattedMessage</a>
          handles messages that use a <a class="externalLink" href="https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax">conversion format</a>
          that is compliant with <a class="javadoc" href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format(java.lang.String, java.lang.Object...)">java.lang.String.format()</a>.
          While this Message has more flexibility than ParameterizedMessage, it is also 5 to 10 times slower.
        </p>
      </section><section>
<h4><a name="StructuredDataMessage"></a>StructuredDataMessage</h4>
        <a name="StructuredDataMessage"></a>
        
<p>
          <a href="../log4j-api/apidocs/org/apache/logging/log4j/message/StructuredDataMessage.html" class="javadoc">StructuredDataMessage</a>
          allows applications to add items to a Map as well as set the id to allow a message to be formatted as a
          Structured Data element in accordance with <a class="externalLink" href="http://tools.ietf.org/html/rfc5424">RFC 5424</a>.
        </p>
      </section><section>
<h4><a name="ThreadDumpMessage"></a>ThreadDumpMessage</h4>
        <a name="ThreadDumpMessage"></a>
        
<p>
          A ThreadDumpMessage, if logged, will generate stack traces for all threads.
          The stack traces will include any locks that are held.
        </p>
      </section><section>
<h4><a name="TimestampMessage"></a>TimestampMessage</h4>
        <a name="TimestampMessage"></a>
        
<p>
          A TimestampMessage will provide a getTimestamp method that is called during event construction. The
          timestamp in the Message will be used in lieu of the current timestamp.
        </p>
      </section></section>
    </section>
  

        </main>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
<p align="center">Copyright &copy; 1999-2020 <a class="external" href="http://www.apache.org">The Apache Software Foundation</a>. All Rights Reserved.<br>
      Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p>
        </div>
      </div>
    </footer>
  </body>
</html>
