コモンズロギングの使用
Java 標準ライブラリによって提供されるロギングとは異なりCommons Logging
、 はサードパーティのロギング ライブラリであり、によってApache
作成されたロギング モジュールです。
Commons Logging
特徴は、異なるログシステムをマウントでき、構成ファイルを通じてマウントするログシステムを指定できることです。デフォルトでは、(もう 1 つの一般的なログ システムです)Commons Loggin
を自動的に検索して使用し、見つからない場合はを使用します。Log4j
Log4j
Log4j
JDK Logging
使用するCommons Logging
必要があるのは 2 つのクラスと 2 つのステップだけです。
最初のステップはクラスのインスタンスをLogFactory
取得することであり、2 番目のステップはインスタンスのメソッドを使用してログを記録することです。Log
Log
サンプルコードは次のとおりです。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main {
public static void main(String[] args) {
Log log = LogFactory.getLog(Main.class);
log.info("start...");
log.warn("end.");
}
}
上記のコードを実行すると、必ず同様のコンパイル エラーが発生しますerror: package org.apache.commons.logging does not exist
(org.apache.commons.logging パッケージが見つかりません)。Commons Logging
サードパーティが提供するライブラリなので、最初にダウンロードする必要があります。ダウンロード後、解凍して到commons-logging-1.2.jar
このファイルを見つけ、Java ソース コードをMain.java
次のディレクトリに配置しますwork
。
work
│
├─ commons-logging-1.2.jar
│
└─ Main.java
次に Main.java を javac でコンパイルし、コンパイル時にクラスパスを指定します。そうしないと、コンパイラは参照するパッケージを見つけることができませんorg.apache.commons.logging
。コンパイルコマンドは以下のとおりです。
javac -cp commons-logging-1.2.jar Main.java `
コンパイルが成功すると、現在のディレクトリに追加の Main.class ファイルが存在します。
work
│
├─ commons-logging-1.2.jar
│
├─ Main.java
│
└─ Main.class
これで、この Main.class を実行できるようになります。Java コマンドを使用します。クラスパスも指定する必要があります。コマンドは次のとおりです。
java -cp .;commons-logging-1.2.jar Main
受信クラスパスには 2 つの部分があることに注意してください。1 つは .、もう 1 つはcommons-logging-1.2.jar
; で区切られています。.
現在のディレクトリを示します。これがないと.
、JVM は現在のディレクトリで Main.class を検索せず、エラーを報告します。
Linux
またはで実行する場合macOS
、classpath
区切り文字は ; ではなく :: であることに注意してください。
java -cp .:commons-logging-1.2.jar Main
操作の結果は次のようになります。
Mar 02, 2019 7:15:31 PM Main main
INFO: start...
Mar 02, 2019 7:15:31 PM Main main
WARNING: end.
Commons Logging
6 つのログ レベルが定義されています。
FATAL
ERROR
WARNING
INFO
DEBUG
TRACE
默认级别是INFO。
を使用する場合Commons Logging
、静的メソッドでのログインを参照する場合は、通常、静的型変数を直接定義します。
// 在静态方法中引用Log:
public class Main {
static final Log log = LogFactory.getLog(Main.class);
static void foo() {
log.info("foo");
}
}
インスタンス メソッドで参照されLog
、通常はインスタンス変数を定義します。
// 在实例方法中引用Log:
public class Person {
protected final Log log = LogFactory.getLog(getClass());
void foo() {
log.info("foo");
}
}
なお、インスタンス変数のログを取得する方法は、LogFactory.getLog(getClass())
を使用することもできますがLogFactory.getLog(Person.class)
、前者の方法の方がサブクラスが直接ログインスタンスを利用できるという大きな利点があります。例えば:
// 在子类中使用父类实例化的log:
public class Student extends Person {
void bar() {
log.info("bar");
}
}
Java クラスの動的な性質により、サブクラスによって取得されるログ フィールドは実際には同等ですLogFactory.getLog(Student.class)
が、親クラスから継承されるため、コードを変更する必要はありません。
さらに、Commons Logging
たとえば のロギング メソッドは、info()
標準のものに加えて、info(String)
非常に便利なオーバーロード メソッドを提供します。info(String, Throwable)
これにより、例外のロギングがさらに簡単になります。
try {
...
} catch (Exception e) {
log.error("got exception!", e);
}
log.error(String, Throwable)
印刷例外を使用します。
まとめ
Commons Logging
最も広く使用されているロギング モジュールです。
Commons Logging
API は非常にシンプルです。
Commons Logging
追加のロギング モジュールを自動的に検出して使用できます。
読んだ後に何かを得た場合は、Knowledge Planet コミュニティのディスカッションに参加することもできます。