HOWTO · Java

Java でロガーを使用する

この記事では、Java でロガーを使用する方法を紹介します。

このページの内容

Java プログラミング言語では、ロギングは、ユーザーが特定のクラスから生成されたエラーを追跡できるようにする API です。ロガーは、タイムスタンプとそれが入力されるエンドポイントを追加することにより、リアルタイムのロギングメカニズムを支援します。API は、イベントの追跡をログの logger として維持するのに役立ちます。レコードは、発生した問題の根本原因を特定し、後で同じイベントを再生成するのに役立ちます。

この記事では、Java ログをより有効に活用する方法を紹介します。

Java でのロガーの機能

ロガーとその機能は、以下のプログラムで示されています。

package log_file;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class AddLoggerInFile {
  public static void main(String[] args) {
    Logger logger = Logger.getLogger("MyLog");
    FileHandler fileHandler;
    try {
      fileHandler = new FileHandler("src/main/resources/MyLogFile.txt");
      logger.addHandler(fileHandler);
      SimpleFormatter simpleFormatter = new SimpleFormatter();
      fileHandler.setFormatter(simpleFormatter);
      logger.info("Log to test");

    } catch (SecurityException e) {
      logger.info("Exception:" + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      logger.info("IO Exception:" + e.getMessage());
      e.printStackTrace();
    }
    logger.info("Hi In the main class");
  }
}

上記のコードブロックでは、ロガーが最初にインスタンス化されます。

このクラスは、java.util.logging パッケージに含まれています。getLogger は、Logger クラスに存在する静的メソッドであり、指定された名前でシステムに存在しない場合にロガーを作成します。関数 else は、既存のロガーインスタンスがすでに存在する場合、それを返します。

指定された名前が null 値の場合、関数は NullPointerException をスローします。ロガーインスタンスがインスタンス化されると、ファイルハンドラインスタンスが作成されます。

FileHandler クラスは java.util.logging パッケージに含まれており、logger インスタンスを使用して出力されたログを処理するように特別に設計および構成されています。コンストラクターFileHandler は、ハンドラーを初期化して、指定されたファイル名に情報を書き込みます。コンストラクターは、出力ファイルの名前をパラメーターとして受け取ります。

上記のコードでは、相対パスにファイル名が指定されています。サイズは、ログが入る制限まで拡張される可能性があるため、ファイルで定義されていません。コンパイラーがファイルを開く際に問題が発生すると、コンストラクターは IOException をスローします。セキュリティマネージャに LoggingPermission がない場合は SecurityException をスローし、パターンが空の文字列の場合は IllegalArgumentException をスローします。

addHandler メソッドは、ファイルハンドラーをマップして、ログメッセージをファイルに受信します。この関数は値を返さないため、void 戻り型です。代わりに、ログとイベントのみを消費します。セキュリティマネージャに十分なログ権限がない場合は、SecurityException がスローされます。

SimpleFormatter インスタンスが開始されます。このクラスは、java.util.logging パッケージにも含まれています。フォーマッターは、logging.SimpleFormatter.format プロパティを使用してログを自動フォーマットする特権を許可します。このプロパティにより、ログメッセージを定義された形式にすることができるため、均一性が維持されます。

setFormatter は、ロガーインスタンスにフォーマッターを設定する関数です。info は、Logger クラスに存在する関数で、INFO ログメッセージをファイルに出力します。Level クラスにはさまざまなログレベルが存在する可能性があります。用途に応じて、INFO、DEBUG、FINE、CONFIG、および SEVERE ログを使用できます。

ログレベルは、プログラムログの重大度を定義するログの詳細です。レベルには、いくつかの定義された数と指定された意味があります。たとえば、SEVERE のログ値は 1000 であり、システムの障害を示しているため、すぐに対処する必要があります。

重大度は、一部のネットワーク障害またはデータベース接続が失われたときに発生します。同様に、警告レベルは 900 の値を保持し、システムの潜在的なリスクを示します。

以下は、標準のコンソール出力と MyLogFile.txt ファイルに入力される出力です。

出力:

Jul 04, 2021 12:05:29 AM log_file.AddLoggerInFile main
INFO: Log to test
Jul 04, 2021 12:05:29 AM log_file.AddLoggerInFile main
INFO: Hi In the main class