2011-11-14 30 views
4

スーパークラスのメソッドにloggingステートメントがあります。 SubClassAのObjectに対してメソッドが呼び出された場合にのみ、このステートメントを有効にします。log4j:スーパークラスのメソッドのサブクラスでログを有効にする方法

...

public class SubClassA extends SuperClass 
{ 
private static Logger    logger = Logger.getLogger(SubClassA.class); 
} 

...私だけSubclassAのために)(テストでログを有効にするにはどうすればよい

public class SubClassB extends SuperClass 
{ 
private static Logger    logger = Logger.getLogger(SubClassB.class); 
public static void main(String[] p_Args) 
{ 
    SubClassA subClassA = new SubClassA(); 
    SubClassB subClassB = new SubClassB(); 
    subClassA.test(); 
    subClassB.test(); 
} 
} 

log4j.logger.SuperClass =情報//両方のサブクラス

log4j.logger.SubClassA =情報// test()メソッドのために何もしません

+0

:。http://stackoverflow.com/questions/1406931/using-log4j-with-inherited-classes – jalopaba

答えて

5

Iのための試験()メソッドでログインできますロガーはクラスや継承について何も知らないので、それは可能だとは思わない。ロガー名は "a.b.c.d"のような単純なテキスト名です。たぶん、あなたはすなわち代わりに、スーパークラスのサブクラスのクラスを使用することができます。

private static Logger    logger = Logger.getLogger(SuperClass.class); 

使用:

private Logger    logger = Logger.getLogger(getClass()); 

か、その両方を使用できます。

private Logger    subLogger = Logger.getLogger(getClass()); 
private static Logger  logger = Logger.getLogger(SuperClass.class); 

、その後、あなたはより洗練された使用することができますロジック:

if(logger.isInfoEnabled() || subLogger.isInfoEnabled()) 
{ 
... 
} 

しかし、もし私があなただったら、ロギングはできるだけシンプルでなくてはならないので、私はこの魔法を使わないだろう。

+0

は、私が個人的にLogger.getLogger(のgetClass()) –

+0

@lechlukaszでケースを好みますLogger.getLogger(SuperClass.class)を使用すると、ログファイルに正確なクラス名が表示されるため、行を記録するコードのビットを見つけるのがはるかに簡単です。getClass()の場合は、 lはサブクラス名を参照しています。また、ログに記録された行のすべてのスーパークラスを調べる必要があります。 – kan

0

あなただけにあなたがLogger.getLogger("SpecialSubClassALogger")(特定の文字列にロガー(または1という名前の標準パッケージ/クラスへの追加ロガー)を定義し、ログインするためにSuperClassでそれを使用する必要があり、この1つのサブクラスをロギングを有効にする場合。その後、log4j.logger.SpecialSubClassALogger=infoを使用することができます関連

関連する問題