2010-10-12 4 views
5

У меня есть два класса в моем проекте, которые я хотел бы передать логгерам из основного класса в подкласс и иметь подкласс для использования параметров родительского регистратора.Передача регистратора между классами

Подкласс - это отдельный общий класс (т. Е. Не привязанный к основному классу) и должен иметь возможность создавать собственный журнал, если его нет.

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

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

Как бы я это сделал?

ответ

10

Предполагаю, что вы используете пакет java.util.logging. В этом случае, когда и где вы используете Logger.getLogger (someString), вы получите тот же экземпляр Logger.

Например: если в основном классе используется Logger log = Logger.getLogger ("myLogger"); , вы можете получить тот же регистратор в любом другом классе, используя Logger.getLogger («myLogger»);

+0

Так что не нужно проходить регистратор и установить экземпляр регистратора? , например. private void setLogger (Logger logger) { this.logger = logger; } – Omertron

+0

Итак, я сделал это, изменил метод, чтобы принять имя строки регистратора. Теперь мне нужно перенаправить logFormatter основного класса на форматтер моего локального класса, но теперь он «перезаписывает» форматировщик основного класса. – Omertron

+0

. Ну, вы можете «сохранить» исходный (основной) форматщик логов, например, как поле подкласса, и установите его, когда вы закончите использовать его в подклассе. Я бы сказал, что он достаточно безопасен, если нет параллелизма. Однако рекомендуемая практика заключается в том, что все классы должны использовать собственный журнал и получать свои собственные экземпляры с помощью Logger.getLogger (LocalClass.class.getName()). – cbaby

0

Это то, что я до сих пор:

public void setLogger(String loggerName) { 
    MySubClass.logger = Logger.getLogger(loggerName); 

    for (Handler handler : logger.getHandlers()) { 
     handler.setFormatter(tmdbFormatter); 
    } 
    logger.setUseParentHandlers(true); 
    logger.setLevel(Level.ALL); 
} 
Смежные вопросы