gpt4 book ai didi

java - log4j:如何为父类(super class)中的方法在子类中启用日志记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:12 26 4
gpt4 key购买 nike

我的父类(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com