Pet*_*ter 3 java inheritance log4j
我在我的超类的方法中有一个日志记录语句.我想只在为SubClassA的Object调用该方法时才启用此语句.
public class SuperClass
{
private static Logger logger = Logger.getLogger(SuperClass.class);
public void test()
{
logger.info("test...");
}
}
Run Code Online (Sandbox Code Playgroud)
...
public class SubClassA extends SuperClass
{
private static Logger logger = Logger.getLogger(SubClassA.class);
}
Run Code Online (Sandbox Code Playgroud)
...
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何仅为SubclassA启用test()中的日志记录?
log4j.logger.SuperClass = info //为两个子类启用了test()方法
log4j.logger.SubClassA = info //对test()方法没有任何作用
我不认为这是可能的,因为logger对类和继承一无所知.记录器名称是一个简单的文本名称,如"abcd".也许你可以在超类中使用子类的类,即代替:
private static Logger logger = Logger.getLogger(SuperClass.class);
Run Code Online (Sandbox Code Playgroud)
使用:
private Logger logger = Logger.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
或者你可以使用两者:
private Logger subLogger = Logger.getLogger(getClass());
private static Logger logger = Logger.getLogger(SuperClass.class);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用更复杂的逻辑:
if(logger.isInfoEnabled() || subLogger.isInfoEnabled())
{
...
}
Run Code Online (Sandbox Code Playgroud)
但如果我是你,我不会使用这种魔法,因为记录应该尽可能简单(但不是更简单).
| 归档时间: |
|
| 查看次数: |
3900 次 |
| 最近记录: |