バナー画像

ネットでよく耳にする「過去ログ」や「ログを確認する」という言葉はプログラムの世界では非常にメジャーなものです。

ロギングという言葉で表されますが、これは「起こった出来事についての情報などを一定の形式で時系列に記録・蓄積すること」を指し、このロギングによって記録されたデータのことを「Log(ログ)」と呼びます。

今回はこのロギングと”Loggerクラス”を使ってログを出力する方法について解説してみたいと思います。

ロギングとは

冒頭でも説明していますが、ロギングとは「起こった出来事についての情報などを一定の形式で時系列に記録・蓄積すること」を指します。

ロギングによって蓄積された記録には次の様な内容が記載されています。

ロギングによって蓄積される内容
  • 使用している設定値や詳細な情報表示などデバッグ用の表示
  • 正常動作の記録
  • 警告を出しておきたい動作の記録
  • エラーなどの問題の記録
  • 停止してしまうような致命的な記録

またこれらの内容は致命度によっていくつかに分類されます。

ログレベルについて

先ほど解説した「致命度による分類」をログレベルと言い、そのレベルは次のようになっています。

ログレベル
  • レベル分類 – Levelクラスの定数 – Loggerクラスのメソッド
  • 最も詳細 – FINEST – finest
  • 詳細 – FINER – finer
  • 普通 – FINE – fine
  • 構成 – CONFIG – config
  • 情報 – INFO – info
  • 警告 – WARNING – warning
  • 重大 – SEVERE – severe

このレベルを基準としてどのレベルからを履歴に残すか選択が出来ます。

例)Level.INFOとして設定すると、「情報」「警告」「重大」の3種を履歴として保存。

Loggerでログを出力させる

ログを出力させるには、いくつかのクラスを組み合わせる必要があります。

詳しい説明の前にまずはコード全体を見てみましょう。

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

public class LoggingSample {

    public static void main(String[] arg) throws SecurityException, IOException {

        Logger logger = Logger.getLogger(LoggingSample.class.getName());
        logger.setLevel(Level.INFO);

        Handler handler = new FileHandler("C:\\sample\\sample.log", true);
        handler.setFormatter(new SimpleFormatter());
        logger.addHandler(handler);

        logger.finest("FINEST");
        logger.finer("FINER");
        logger.fine("FINE");
        logger.config("CONFIG");
        logger.info("INFO");
        logger.warning("WARNING");
        logger.severe("SEVERE");

        logger.log(Level.INFO, "エラー発生", new RuntimeException("Runtime Error"));
    }
}

実行結果

11月 28, 2019 7:53:33 午後 LoggingSample main
情報: INFO
11月 28, 2019 7:53:33 午後 LoggingSample main
警告: WARNING
11月 28, 2019 7:53:33 午後 LoggingSample main
重大: SEVERE
11月 28, 2019 7:53:33 午後 LoggingSample main
警告: エラー発生
java.lang.RuntimeException: Runtime Error
	at LoggingSample.main(LoggingSample.java:27)

では早速、上のコードの説明に入ります。

まずはじめにLoggerオブジェクトを作成します。

続いてファイルに出力させる設定に入ります。

この設定では、Handlerインターフェースの実装クラス”FileHandler”を利用します。

今回はCドライブ直下に”sample”というフォルダを作成し、そこに”sample.log”というファイルで出力させるため、”FileHandler”の第一引数には「C:\\sample\\sample.log」と記述しています。

また、”FileHandler”メソッドの第二引数にBoolean型を指定することで、上書きさせるか追記させるかの指定が出来ます。

尚”true”の場合には上書き型、”false”の場合には追記型となります。

そして最後に、先ほど作成したHandlerオブジェクトに”setFormatter”メソッドを使って出力時のフォーマットを指定します。

デフォルトではXMLとなっていますが、今回は読みやすい形式で出力させたいので”SimpleFormatter”を指定しています。

これでLoggerオブジェクトから”addHandler”メソッドに引数でfHandlerを指定して呼び出せば、エラーログが出力されます。

例外をスローさせるためのlogメソッドでは、第一引数でログレベル、第二引数でエラー発生時に出力させるメッセージ、第三引数でオブジェクトを指定します。

こうすることでスタックトレースの内容が表示されるようになるので、どのような例外がいつどこで発生したのか情報を取得できます。

Loggingを行う上で留意する事

ここまではLoggingについての解説をしてきましたが、この項目ではLoggingを行う上で留意しておくべき点について少し解説したいと思います。

単純にLoggingを行ってもその情報が使えなければ何の役にも立ちません。

また誰もが見れるようなものであるなら、それはセキュリティーホールを自ら公開しているのと同じことになります。

よってLoggingを行う場合には、以下の点に留意しましょう。

Loggingを行う際に留意すべき点
フォーマット
実行時刻、出力箇所、種類、メッセージは最低限出力表示するさせる
出力先
重大なエラーや重要情報等が出力された場合、誰もが見れる場所に置いておくとそれが原因で大変な事態を招くことも。ログファイルは必ず一般公開されていない階層に置くようにする
ログメッセージ
わかりやすい内容で簡潔になるよう心掛ける。他の人が見てもすぐわかるようにする。またマルチバイト文字は出来るだけ避ける。

まとめ

いかがでしたか?

今回はLoggerの使い方について解説してみました。

初心者の方には若干難しく感じたかもしれませんが、Loggingはとても重要なセクターですので、何度も読み返して理解してみましょう。

またこれ以外にも複雑な構造のプログラムもまだまだたくさんありますので、これを機にロジックをより簡単に読み解く方法についても考えてみましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。