我的超类方法中有一个日志语句。我想只在为SubClassA的Object调用该方法时才启用此语句。
public class SuperClass
{
private static Logger logger = Logger.getLogger(SuperClass.class);
public void test()
{
logger.info("test...");
}
}
...
public class SubClassA extends SuperClass
{
private static Logger logger = Logger.getLogger(SubClassA.class);
}
...
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();
}
}
如何仅针对SubclassA启用test()的登录?
log4j.logger.SuperClass = info //为两个子类启用test()方法
log4j.logger.SubClassA = info //对test()方法没有任何作用
答案 0 :(得分:5)
我不认为这是可能的,因为logger对类和继承一无所知。记录器名称是一个简单的文本名称,如“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())
{
...
}
但如果我是你,我不会使用这种魔法,因为记录应该尽可能简单(但不是更简单)。
答案 1 :(得分:0)
如果您只想在这个子类中启用日志记录,则应该将记录器(或名为one的标准包/类的附加记录器)定义为特定字符串(Logger.getLogger("SpecialSubClassALogger")
并在SuperClass
中使用它来记录。然后您可以使用log4j.logger.SpecialSubClassALogger=info
。