66

log4j の使用方法に関する記事をいくつか読みました。それらのほとんどは、最初に以下のコードを提供します。

 Logger logger = Logger.getLogger("com.foo.Bar");

また

 Logger logger = Logger.getLogger(XXX.class);

これにより、ロガー オブジェクトが初期化されます。しかし、私の質問は、クラス タイプをパラメーターとして送信する必要があるのはなぜですか? ロガーを使用する場合、どのクラスで使用するかは気にしないようです。そのため、クラス タイプはロガーには影響しないようです。ロガーを static および public として宣言すると、このロガーを別のクラスで呼び出すことができます。ロガーを使用すると、クラス型は何かをバインドしますか? または、任意のクラス タイプを getLogger 関数に送信できます。

4

8 に答える 8

63
  1. クラスタイプ以外の任意の文字列をロガー名としていつでも使用できます。間違いなく大丈夫です。

  2. 多くの人がクラスタイプを使用する理由は、私は推測します:

    • 使いやすい。複雑なJavaEEアプリケーションでのロガー名の重複について心配する必要はありません。他の人もあなたのロガー名を使用している場合は、クラスの出力だけでなく、ログファイルがある可能性があります。

    • ロガー名がログファイルに表示されるため、ログクラスを簡単に確認できます。特定のクラスにすばやく移動できます。

    • クラスを配布するとき、人々はログをクラスから特定のファイルまたは別の場所にリダイレクトしたいと思うかもしれません。このような場合、特別なロガー名を使用すると、ソースコードを確認する必要があるか、ソースが利用できない場合は確認できない場合があります。

于 2013-01-30T05:08:44.300 に答える
9

javadocから:Logger.getLogger(Class)は の短縮形ですgetLogger(clazz.getName())。log4j およびその他のロギング フレームワークで使用される規則は、クラスごとに静的ロガーを定義することです。例えば、

public class SomeClass {
    private static final Logger LOG = Logger.getLogger(SomeClass.class);
    ...
}

この規則は、ログ出力を整理するのにうまく機能することがわかりました。確かに必須ではありませんが、便利な方法です。

于 2013-01-30T04:35:29.623 に答える
7

1: log4j.properties で前に定義するときに、「クラス名」または「文字列名」を使用できます。

log4j.logger.anything=INFO,anything

したがって、ログを次のように記録できます

 Logger logger = Logger.getLogger("anything");

2:ログ名を定義しておけば、別なので簡単に確認できます。

于 2013-10-14T03:25:41.473 に答える
1

ログは、クラス タイプ別に追跡できます。

例1:

public class Bar {
    Logger logger = Logger.getLogger("com.foo.Bar");
    ...
    logger.debug("debug message");
}

ログメッセージの下に表示される場合があります。

DEBUG: **com.foo.Bar** debug message

例 2:

public class Foo {
    Logger logger = Logger.getLogger("com.foo.Foo");
    ...
    logger.debug("debug message");
}

ログメッセージの下に表示される場合があります。

DEBUG: **com.foo.Foo** debug message

Java クラスとロガー メッセージが大量にある場合、ログ メッセージの送信元を見つけるのは非常に困難です。

于 2013-01-30T04:46:31.453 に答える
0

XXX.classは、ロガーに名前を付けることです。つまり、後続のログステートメントにフラグを立てます。特定のログステートメントがどのクラスに属しているか/どのクラスから発生したかを知るため。

于 2013-01-30T04:32:12.590 に答える
0

クラス名付きのロガーは必須ではありません。独自のメッセージを使用できます。使用するのは慣習です:

Logger logger = Logger.getLogger(XXX.class) 

デバッグに便利です。どのコード行が実行されたかを記録します。

于 2017-12-27T22:41:12.560 に答える