Module java.logging

Class XMLFormatter

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

public class XMLFormatter extends Formatter
格式化LogRecord为标准的XML格式。

DTD规范作为Java Logging APIs规范的附录提供。

XMLFormatter可以与任意字符编码一起使用,但建议通常使用UTF-8。字符编码可以在输出Handler上设置。

实现要求:
自JDK 9以来,LogRecord的实例包含一个Instant,该实例可以具有毫秒以下的纳秒分辨率。DTD规范已更新,以允许可选的<nanos>元素。默认情况下,XMLFormatter将计算毫秒以下的纳秒调整(使用LogRecord.getInstant().getNano() % 1000_000)- 如果这不是0,则该调整值将打印在新的<nanos>元素中。然后可以使用Instant.ofEpochSecond(millis/1000L, (millis % 1000L) * 1000_000L + nanos)来重建事件实例,其中millisnanos分别表示<millis><nanos>元素中序列化的数字。
<date>元素现在将包含整个实例,由DateTimeFormatter.ISO_INSTANT格式化。

为了与旧解析器兼容,可以通过在日志配置中指定<xml-formatter-fully-qualified-class-name>.useInstant = false 属性来配置XMLFormatter以恢复到旧格式。当useInstantfalse时,将保留旧的格式。当useInstanttrue(默认值)时,将打印<nanos>元素,并且<date>元素将包含格式化的实例。

例如,为了配置普通实例的XMLFormatter以省略新的<nano>元素,可以在日志配置中指定java.util.logging.XMLFormatter.useInstant = false

自:
1.4
  • Constructor Details

    • XMLFormatter

      public XMLFormatter()
      创建XMLFormatter的新实例。
      实现要求:
      自JDK 9以来,XMLFormatter将以Instant形式打印记录的事件时间。此实例具有系统上可用的最佳分辨率。<date>元素将包含由DateTimeFormatter.ISO_INSTANT格式化的实例。此外,如果实例包含毫秒以下的一些纳秒,则将打印一个可选的<nanos>元素,其中包含纳秒调整。

      可以通过在日志配置中指定属性来关闭此新行为,并恢复旧的格式。如果LogManager.getLogManager().getProperty( this.getClass().getName()+".useInstant")"false""0",则将恢复旧的格式。

  • Method Details

    • format

      public String format(LogRecord record)
      将给定消息格式化为XML。

      此方法可以在子类中重写。建议使用Formatter.formatMessage(java.util.logging.LogRecord)便捷方法来本地化和格式化消息字段。

      指定者:
      format 在类 Formatter
      参数:
      record - 要格式化的日志记录。
      返回:
      格式化的日志记录
    • getHead

      public String getHead(Handler h)
      返回一组XML格式记录的头字符串。
      覆盖:
      getHead 在类 Formatter
      参数:
      h - 目标处理程序(可以为null)
      返回:
      一个有效的XML字符串
    • getTail

      public String getTail(Handler h)
      返回一组XML格式记录的尾字符串。
      覆盖:
      getTail 在类 Formatter
      参数:
      h - 目标处理程序(可以为null)
      返回:
      一个有效的XML字符串