Module java.logging
Package java.util.logging

Class XMLFormatter

java.lang.Object
java.util.logging.Formatter
java.util.logging.XMLFormatter

public classXMLFormatterextendsFormatter
Format a LogRecord into a standard XML format.

The DTD specification is provided as Appendix A to the Java Logging APIs specification.

The XMLFormatter can be used with arbitrary character encodings, but it is recommended that it normally be used with UTF-8. The character encoding can be set on the output Handler.

Implementation Requirements:
Since JDK 9, instances ofLogRecord contain anInstant which can have nanoseconds below the millisecond resolution. The DTD specification has been updated to allow for an optional<nanos> element. By default, the XMLFormatter will compute the nanosecond adjustment below the millisecond resolution (usingLogRecord.getInstant().getNano() % 1000_000) - and if this is not 0, this adjustment value will be printed in the new<nanos> element. The event instant can then be reconstructed usingInstant.ofEpochSecond(millis/1000L, (millis % 1000L) * 1000_000L + nanos) wheremillis andnanos represent the numbers serialized in the<millis> and<nanos> elements, respectively.
The<date> element will now contain the whole instant as formatted by theDateTimeFormatter.ISO_INSTANT formatter.

For compatibility with old parsers, XMLFormatters can be configured to revert to the old format by specifying a<xml-formatter-fully-qualified-class-name>.useInstant = falseproperty in the logging configuration. WhenuseInstant isfalse, the old formatting will be preserved. WhenuseInstant istrue (the default), the<nanos> element will be printed and the<date> element will contain theformatted instant.

For instance, in order to configure plain instances of XMLFormatter to omit the new<nano> element,java.util.logging.XMLFormatter.useInstant = false can be specified in the logging configuration.

Since:
1.4
  • Constructor Details

    • XMLFormatter

      public XMLFormatter()
      Creates a new instance of XMLFormatter.
      Implementation Requirements:
      Since JDK 9, the XMLFormatter will print out the recordevent time as an Instant. This instant has the best resolution available on the system. The<date> element will contain the instant as formatted by theDateTimeFormatter.ISO_INSTANT. In addition, an optional<nanos> element containing a nanosecond adjustment will be printed if the instant contains some nanoseconds below the millisecond resolution.

      This new behavior can be turned off, and the old formatting restored, by specifying a property in thelogging configuration. IfLogManager.getLogManager().getProperty( this.getClass().getName()+".useInstant") is"false" or"0", the old formatting will be restored.

  • Method Details

    • format

      public String format(LogRecord record)
      Format the given message to XML.

      This method can be overridden in a subclass. It is recommended to use theFormatter.formatMessage(java.util.logging.LogRecord) convenience method to localize and format the message field.

      Specified by:
      format in class Formatter
      Parameters:
      record - the log record to be formatted.
      Returns:
      a formatted log record
    • getHead

      public String getHead(Handler h)
      Return the header string for a set of XML formatted records.
      Overrides:
      getHead in class Formatter
      Parameters:
      h - The target handler (can be null)
      Returns:
      a valid XML string
    • getTail

      public String getTail(Handler h)
      Return the tail string for a set of XML formatted records.
      Overrides:
      getTail in class Formatter
      Parameters:
      h - The target handler (can be null)
      Returns:
      a valid XML string