JDKログを使用する
プログラムを書いている途中で、プログラムの実行結果が期待通りにならないことが分かりました。どうすればよいでしょうか? もちろん、System.out.println()
実行プロセスでいくつかの変数を出力し、各ステップの結果がコード ロジックと一致するかどうかを観察し、目的を絞った方法でコードを変更します。
コードが変更された場合はどうすればよいですか? もちろん、無駄なSystem.out.println()
記述は削除してください。
コードを変更して問題が変わったらどうなるでしょうか? プラスSystem.out.println()
。
これを何度か繰り返した結果、S を使用するのはystem.out.println()
非常に面倒であることがすぐに全員にわかりました。
何をするか?
解決策はログを使用することです。
では、ログとは何でしょうか? ログは でありLogging
、その目的は を置き換えることですSystem.out.println()
。
ログを使用せずに出力するとSystem.out.println()
、次の利点があります。
毎回「ERROR: " + var」と書かれないように出力スタイルを設定したり、
特定のレベルの出力を禁止するように出力レベルを設定したりできます。たとえば、エラー ログのみを出力したり、エラー
ログをファイルにリダイレクトしてプログラム実行後にログを表示したり、ログ
レベルをパッケージ名で制御したり、特定のパッケージのログのみを出力したりできます。出力;はい
...
一言で言えば、多くのメリットがあります。
では、ログをどのように利用するのでしょうか?
Java 標準ライブラリにはログ パッケージが組み込まれているためjava.util.logging
、それを直接使用できます。簡単な例を見てみましょう。
// logging
import java.util.logging.Level;
import java.util.logging.Logger;
public class Hello {
public static void main(String[] args) {
Logger logger = Logger.getGlobal();
logger.info("start process...");
logger.warning("memory is running out...");
logger.fine("ignored.");
logger.severe("process will be terminated...");
}
}
上記のコードを実行すると、次のような出力が得られます。
Mar 02, 2019 6:32:13 PM Hello main
INFO: start process...
Mar 02, 2019 6:32:13 PM Hello main
WARNING: memory is running out...
Mar 02, 2019 6:32:13 PM Hello main
SEVERE: process will be terminated...
比較すると、ログを使用する最大の利点は、時間、呼び出しクラス、呼び出しメソッドなどの多くの有用な情報が自動的に出力されることであることがわかります。
注意して観察した結果、4 つのログのうち 3 つだけが印刷され、logger.fine()
何も印刷されていないことがわかりました。ログの出力レベルを設定できるためです。JDK のログでは、重大なものから通常のものまで 7 つのログ レベルが定義されています。
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
デフォルトのレベルは INFO であるため、INFO レベル以下のログは出力されません。ログ レベルを使用する利点は、レベルを調整することによって、デバッグ関連のログ出力の多くをブロックできることです。
組み込み Java 標準ライブラリの使用にはLogging
次の制限があります。
Logging
システムは設定ファイルを読み取り、JVM の起動時に初期化を完了します。main() メソッドの実行が開始されると、設定を変更することはできません。
この設定はあまり便利ではなく、JVM の起動時にパラメータを渡す必要があります-Djava.util.logging.config.file=<config-file-name>
。
したがって、Java 標準ライブラリに組み込まれている使用法はLogging
それほど広範囲ではありません。より便利なロギング システムは後で導入されます。
まとめ
ログは置換用でありSystem.out.println()
、形式を定義したり、ファイルにリダイレクトしたりできます。
問題追跡を容易にするためにログをアーカイブできます。
ログはレベルごとに分類できるため、特定のレベルを簡単にオンまたはオフにすることができます。
コードを変更せずに、構成ファイルに従ってログを調整できます。
Java 標準ライブラリはjava.util.logging
ロギング機能を提供します。