作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的父类(super class)的一个方法中有一个日志语句。我只想在为 SubClassA 的对象调用该方法时启用此语句。
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() 方法不做任何事情
最佳答案
我认为这是不可能的,因为记录器对类和继承一无所知。记录器名称是一个简单的文本名称,如“a.b.c.d”。也许您可以在父类(super class)中使用子类的类,即代替:
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())
{
...
}
但如果我是你,我不会使用这个魔法,因为日志记录应该尽可能简单(但不能更简单)。
关于java - log4j:如何为父类(super class)中的方法在子类中启用日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8123394/
我是一名优秀的程序员,十分优秀!