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

クラスMemoryHandler

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

public class MemoryHandler
extends Handler
メモリーの循環バッファの要求をバッファ処理するHandlerです。

通常、このHandlerは単に、受信したLogRecordを自身のメモリー・バッファ内に格納し、以前のレコードを破棄します。 このバッファ処理は非常に低コストであり、フォーマット処理のコストもかかりません。 特定のトリガー条件が成立すると、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 specifies the name of the target Handler class.(デフォルトなし)

たとえば、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が存在する場合、そのisLoggableメソッドが呼び出され、指定されたログ・レコードがロギング可能かどうかがチェックされます。 可能でない場合は戻ります。 それ以外の場合、指定されたレコードが内部の循環バッファにコピーされます。 次に、そのレコードのlevelプロパティと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によってバッファの内容が「プッシュ」されるかどうかはチェックしません LogRecordがnullの場合、これはfalseを返します。

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