java.util.logging

接口
java.lang.Object
  继承者 java.util.logging.Handler
      继承者 java.util.logging.MemoryHandler

public class MemoryHandler
     
extends Handler

Handler 在内存中的循环缓冲区中对请求进行缓冲处理。

通常,此 Handler 只将传入的 LogRecords 存储到内存缓冲区,并丢弃原来的记录。此缓冲非常经济,并且避免了格式化开销。在一定的触发条件下,MemoryHandler 将其当前的缓冲区内容 push 到目标 Handler 中,此 Handler 通常将内容发布到外界。

有三种主要模型用于触发缓冲区的 push 操作:

  • 传入的 LogRecord 类型大于预先定义的 pushLevel 级别。
  • 外部类显式地调用 push 方法。
  • 如果记录符合所需的某些标准,则子类重写 log 方法,并扫描每个传入的 LogRecord,调用 push

配置:默认情况下,使用以下 LogManager 配置属性初始化每个 MemoryHandler。如果没有定义该属性(或者有无效的值),则使用指定的默认值。如果没有定义默认值,则抛出 RuntimeException。

  • java.util.logging.MemoryHandler.level 指定 Handler 的级别(默认为 Level.ALL)。
  • java.util.logging.MemoryHandler.filter 指定要使用的 Filter 类的名称(默认为无 Filter)。
  • java.util.logging.MemoryHandler.size 定义缓冲区的大小(默认为 1000)。
  • java.util.logging.MemoryHandler.push 定义 pushLevel(默认为 level.SEVERE)。
  • java.util.logging.MemoryHandler.target 指定目标 Handler 类的名称(无默认值)。

从以下版本开始:
1.4

构造方法摘要
MemoryHandler()
          根据 LogManager 配置属性创建一个 MemoryHandler,并对其进行配置。
MemoryHandler(Handler target, int size, Level pushLevel)
          创建一个 MemoryHandler
 
方法摘要
 void close()
          关闭 Handler,并释放所有相关的资源。
 void flush()
          导致目标 Handler 上的刷新。
 Level getPushLevel()
          获得 pushLevel
 boolean isLoggable(LogRecord record)
          检查此 Handler 是否实际将给定的 LogRecord 记录到其内部缓冲区。
 void publish(LogRecord record)
          将 LogRecord 存储在内部缓冲区。
 void push()
          将所有已缓冲的输出 push 到目标 Handler 中。
 void setPushLevel(Level newLevel)
          设置 pushLevel
 
从类 java.util.logging.Handler 继承的方法
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, reportError, setEncoding, setErrorManager, setFilter, setFormatter, setLevel
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

MemoryHandler

public MemoryHandler()
根据 LogManager 配置属性创建一个 MemoryHandler,并对其进行配置。


MemoryHandler

public MemoryHandler(Handler target,
                     int size,
                     Level pushLevel)
创建一个 MemoryHandler

除了使用给定的 pushLevel 参数和缓冲区大小参数之外,其他都按 LogManager 的属性(或默认值)进行配置 MemoryHandler

参数:
target - 将输出发布到的 Handler。
size - 缓冲区的日志记录数(必须大于 0)
pushLevel - 要 push 的消息级别。
抛出:
IllegalArgumentException - 如果 size <=0。
方法详细信息

publish

public void publish(LogRecord record)
LogRecord 存储在内部缓冲区。

如果有 Filter,则调用其 isLoggable 方法以检查给定的日志记录是否为 loggable。如果不是,则返回它。否则,将给定的记录复制到内部循环缓冲区。然后将该记录的级别属性与 pushLevel 进行比较。如果给定的级别大于等于 pushLevel,则调用 push 将所有已缓冲的记录写入到目标输出 Handler 中。

指定者:
Handler 中的 publish
参数:
record - 日志事件的描述。忽略 null 记录,并且也不发布它。

push

public void push()
将所有已缓冲的输出 push 到目标 Handler 中。

然后清空缓冲区。


flush

public void flush()
导致目标 Handler 上的刷新。

注意,要将 MemoryHandler 缓冲区的当前内容全部写出。这样会要求进行 "push" 操作。

指定者:
Handler 中的 flush

close

public void close()
           throws SecurityException
关闭 Handler,并释放所有相关的资源。这也将关闭目标 Handler

指定者:
Handler 中的 close
抛出:
SecurityException - 如果存在安全管理器并且调用者不具有 LoggingPermission("control")

setPushLevel

public void setPushLevel(Level newLevel)
                  throws SecurityException
设置 pushLevel。将 LogRecord 复制到内部缓冲区后,如果它的级别大于等于 pushLevel,则调用 push

参数:
newLevel - pushLevel 的新值。
抛出:
SecurityException - 如果存在安全管理器并且调用者不具有 LoggingPermission("control")

getPushLevel

public Level getPushLevel()
获得 pushLevel

返回:
pushLevel 的值。

isLoggable

public boolean isLoggable(LogRecord record)
检查此 Handler 是否实际将给定的 LogRecord 记录到其内部缓冲区。

此方法检查 LogRecord 是否有合适的级别,以及是否满足任何的 Filter。但是并检查 LogRecord 是否导致 "push" 缓冲区的内容。如果 LogRecord 为 Null,则该方法返回 false。

覆盖:
Handler 中的 isLoggable
参数:
record - 一个 LogRecord
返回:
如果记录 LogRecord,则返回 true。