モジュール java.logging
パッケージ java.util.logging

クラスMemoryHandler

java.lang.Object
java.util.logging.Handler
java.util.logging.MemoryHandler

public class MemoryHandler extends Handler
メモリー内の循環バッファでリクエストをバッファするHandler

通常、このHandlerは、受信したLogRecordsをメモリー・バッファに格納し、以前のレコードを破棄します。 このバッファ処理は非常に低コストであり、フォーマット処理のコストもかかりません。 特定のトリガー条件では、MemoryHandlerは、現在のバッファ・コンテンツをターゲットHandlerにプッシュします。このターゲットは、通常は外部に公開します。

バッファをプッシュするトリガー・モデルには、主に次の3つがあります。

  • 着信LogRecordには、事前定義済レベル(pushLevel)より大きいタイプがあります。
  • 外部クラスは、pushメソッドを明示的にコールします。
  • サブクラスは、logメソッドをオーバーライドし、受信する各LogRecordをスキャンし、レコードが目的の条件に一致する場合はpushをコールします。

構成: デフォルトでは、各MemoryHandlerは、次のLogManager構成プロパティを使用して初期化されます。<handler-name>は、ハンドラの完全修飾クラス名を示します。 プロパティが未定義である場合(または無効な値を持つ場合)、指定されたデフォルト値が使用されます。 デフォルト値が定義されていない場合は、RuntimeExceptionがスローされます。

  • <handler-name>.levelは、Handler (デフォルトはLevel.ALLです)のレベルを指定します。
  • <handler-name>.filterは、(デフォルトはFilterではありません)を使用するFilterクラスの名前を指定します。
  • <handler-name>.sizeはバッファー・サイズを定義します(デフォルトは1000)。
  • <handler-name>.pushは、pushLevel (デフォルトはlevel.SEVEREです)を定義します。
  • <handler-name>.targetは、ターゲットのHandler クラスの名前を指定します。(デフォルトなし)。

たとえば、MemoryHandlerのプロパティは次のようになります。

  • java.util.logging.MemoryHandler.level=INFO
  • java.util.logging.MemoryHandler.formatter=java.util.logging.SimpleFormatter

カスタム・ハンドラ(例: com.foo.MyHandler)の場合、プロパティは次のようになります。

  • com.foo.MyHandler.level=INFO
  • com.foo.MyHandler.formatter=java.util.logging.SimpleFormatter

導入されたバージョン:
1.4
  • コンストラクタの詳細

    • MemoryHandler

      public MemoryHandler()
      MemoryHandlerを作成し、LogManager構成プロパティに基づいて構成します。
    • MemoryHandler

      public MemoryHandler(Handler target, int size, Level pushLevel)
      MemoryHandlerを作成します。

      MemoryHandlerは、指定されたpushLevel引数およびバッファ・サイズ引数が使用されることを除き、LogManagerプロパティ(またはデフォルト値)に基づいて構成されます。

      パラメータ:
      target - 出力を通知するHandler。
      size - バッファ処理するログ・レコードの数(ゼロより大きくなければならない)
      pushLevel - プッシュを行うメッセージ・レベル
      例外:
      IllegalArgumentException - サイズが0以下の場合
  • メソッドの詳細

    • publish

      public void publish(LogRecord record)
      内部バッファにLogRecordを格納します。

      Filterがある場合、指定されたログ・レコードがloggableかどうかを確認するために、そのisLoggableメソッドがコールされます。 可能でない場合は戻ります。 それ以外の場合、指定されたレコードが内部の循環バッファにコピーされます。 次に、レコードのレベル・プロパティがpushLevelと比較されます。 指定されたレベルがpushLevel以上の場合、pushがコールされ、バッファされたすべてのレコードがターゲット出力Handlerに書き込まれます。

      定義:
      publish、クラスHandler
      パラメータ:
      record - ログ・イベントの説明。 nullレコードは何の通知もなく無視され、発行されない
    • push

      public void push()
      バッファされた出力をターゲットHandlerにプッシュします。

      バッファがクリアされます。

    • flush

      public void flush()
      ターゲットHandlerでフラッシュします。

      MemoryHandlerバッファの現在の内容は書き込まれないことに注意してください。 書き出すにはpushが必要になります。

      定義:
      flush、クラスHandler
    • close

      public void close() throws SecurityException
      Handlerを閉じて、関連するすべてのリソースを解放します。 これにより、ターゲットHandlerもクローズされます。
      定義:
      close、クラスHandler
      例外:
      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が返されます。

      オーバーライド:
      isLoggable、クラスHandler
      パラメータ:
      record - LogRecord (nullの場合がある)。
      戻り値:
      LogRecordがログに記録される場合はtrue。