Java Logger в подклассе - PullRequest
       1

Java Logger в подклассе

9 голосов
/ 12 мая 2011

Чтобы заставить C.run () использовать собственный регистратор классов, я должен добавить публичный / защищенный метод getLogger () в B?

public abstract class A extends Thread {
    @Override
    public abstract void run();
}

public class B extends A {

    private static final Logger logger = Logger.getLogger(B.class.getName());

    @Override
    protected void run() {
        // do something

        logger.info("B");
    }
}

public class C extends B {
}

Ответы [ 2 ]

12 голосов
/ 12 мая 2011

Ну, логгеры идеально настроены на уровне класса. Поэтому, если C нужен собственный Logger, объявите свой собственный Logger в C, например.

private static final Logger logger = Logger.getLogger(C.class.getName());

Таким образом, когда C запускает некоторый код, он регистрируется в своем собственном Logger, а когда B запускает, он регистрирует в своем собственном Logger. Вы сможете ясно увидеть, какой класс записывает, что таким образом.

Если это не то, что вам нужно, пожалуйста, расширите вопрос тем, чего вы пытаетесь достичь и почему.

Я не уверен, что следующий код является хорошей идеей (я всегда хочу, чтобы класс, который физически выполняет код, был Logger), но он должен работать:

public abstract class A extends Thread {
    @Override
    public abstract void run();
    protected abstract Logger getLogger();
}

public class B extends A {

    private static final Logger logger = Logger.getLogger(B.class.getName());

    @Override
    public void run() {
        getLogger().info("B");
    }

    @Override
    protected Logger getLogger() {return logger;);  
}

public class C extends B {

    private static final Logger logger = Logger.getLogger(C.class.getName());

    @Override
    protected Logger getLogger() {return logger;);  
}
2 голосов
/ 12 мая 2011

Вы можете использовать это в базовом классе:

protected Logger logger = Logger.getLogger(this.getClass().getName());

this.getClass() инициализирует регистратор с именем подкласса.

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