[Java] Commons Loggingを使用した例外処理

コモンズロギングの使用

Java 標準ライブラリによって提供されるロギングとは異なりCommons Logging、 はサードパーティのロギング ライブラリであり、によってApache作成されたロギング モジュールです。

Commons Logging特徴は、異なるログシステムをマウントでき、構成ファイルを通じてマウントするログシステムを指定できることです。デフォルトでは、(もう 1 つの一般的なログ システムです)Commons Logginを自動的に検索して使用し、見つからない場合はを使用しますLog4jLog4jLog4jJDK Logging

使用するCommons Logging必要があるのは 2 つのクラスと 2 つのステップだけです。

最初のステップはクラスのインスタンスをLogFactory取得することであり、2 番目のステップはインスタンスのメソッドを使用してログを記録することです。LogLog

サンプルコードは次のとおりです。

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またはで実行する場合macOSclasspath区切り文字は ; ではなく :: であることに注意してください。

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 Logging6 つのログ レベルが定義されています。

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 LoggingAPI は非常にシンプルです。

Commons Logging追加のロギング モジュールを自動的に検出して使用できます。

読んだ後に何かを得た場合は、Knowledge Planet コミュニティのディスカッションに参加することもできます。

おすすめ

転載: blog.csdn.net/ihero/article/details/132191220
おすすめ