Существует класс A и класс B. Они оба используют класс C с помощью композиции. Класс A и класс B необходимо генерировать самостоятельно в разных файлах, например: class A генерирует журнал в файл «log_A.log» и класс B - в «log_B.log».Как записать общий класс, используемый двумя классами
Мой вопрос: как написать журнал класса С, относящийся к классу, который вызывает метод класса С? Я имею в виду: если метод класса C был вызван из класса A, журнал класса C должен быть сгенерирован для файла журнала для класса A - «log_A.log». Если метод класса C вызывается из класса B, журнал класса C должен быть сгенерирован для файла «log_B.log». И одна вещь еще - уровень протоколирования для класса C должна быть такой же, как для лесопогрузчика класса А или В.
Например, класс A:
//loggerA - it's logger that writes to file "log_A.log"
private static final Logger log = Logger.getLogger("loggerA");
public void method(){
log.debug("Write to log of class A");
C c = new C();
c.method(); //activity in class C should be written to "log_A.log" as well
}
В классе B:
private static final Logger log = Logger.getLogger("loggerB");
public void method(){
log.debug("Write to log of class B");
C c = new C();
c.method(); //activity in class C should be written to "log_B.log" as well
}
В классе C:
private static final Logger log = Logger.getLogger(???);
public void method(){
log.debug("Any log message");
}
PS Я использую LOG4J 1.2.16
Я могу попробовать сделать следующее: В классе C:
public void method(String logger){
final Logger log = Logger.getLogger(logger); //Use the logger of calling class
log.debug("Any log message");
}
Но я думаю, что это грязное решение
Вы можете удалить статический keywork от регистратора C. Это не имеет смысла, поскольку нам нужен разный регистратор для каждого экземпляра. Infact, сохраняя его статичным, создаст проблемы, поскольку регистратор другого экземпляра будет изменен. –