log4j: как включить ведение журнала в подклассе для метода в суперклассе - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть логирование в методе моего суперкласса. Я хочу включить этот оператор, только если метод вызывается для объекта 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();
}
}

Как включить вход в test () только для SubclassA?

log4j.logger.SuperClass = info // включает вход в метод test () для обоих подклассов

log4j.logger.SubClassA = info // ничего не делает для метода test ()

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

Я не думаю, что это возможно, потому что регистратор ничего не знает о классах и наследовании.Имя регистратора - это простое текстовое имя, например «abcd».Возможно, вы можете использовать класс подкласса в суперклассе, то есть вместо:

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 голосов
/ 14 ноября 2011

Если вы хотите разрешить вход в систему только в этом подклассе , вы должны определить регистратор (или дополнительный регистратор для стандартного пакета / названного класса) для конкретной строки (Logger.getLogger("SpecialSubClassALogger") и использовать еев SuperClass для входа. Затем вы можете использовать log4j.logger.SpecialSubClassALogger=info.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...