Почему новый экземпляр использует регистратор из старых экземпляров? - PullRequest
2 голосов
/ 20 апреля 2010

Я генерирую 2 экземпляра следующим образом:

    gameManager manager1 = new CTManager(owner,players1,"en");
    manager1.start();
    gameManager manager2 = new CTManager(owner,players2,"en");
    manager2.start();

Метод start() в GameManager выглядит так:

void start() {
    game.start();
}

Когда я создаю игровой экземпляр, я создаю логер: log = Logger.getLogger("TestLog"); (log является открытым полем класса, к которому принадлежит game).

В game.start() я запускаю много процессов и даю им ссылку на соответствующий log. Итак, я ожидаю, что manager1 и manager2 будут писать в разные файлы. Но manager2 пишет в свой собственный файл и в файл журнала manager1. Почему это может произойти?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Вы используете одно и то же имя журнала "TestLog" оба раза, поэтому вы получаете один и тот же экземпляр Logger оба раза Вот как работает этот класс. См. здесь , если вы используете встроенный класс java.util.logging.Logger. Другие пакеты журналов, вероятно, имеют похожее поведение.

0 голосов
/ 20 апреля 2010

С точки зрения большинства каркасов логирования имя, которое вы вводите в метод getLogger, делает регистратор уникальным, а не экземпляром класса. Поэтому, когда вы звоните Logger.getLogger("TestLog");, вы получаете один и тот же регистратор в каждом случае.

0 голосов
/ 20 апреля 2010

Предполагая, что вы используете Log4J или java.util.logging (который основан на Log4J), будет зарегистрирован только один журнал для каждого класса / имени. Независимо от того, сколько раз вы вызываете метод getLogger с одним и тем же аргументом, он вернет вам один и тот же объект.

Поэтому, когда вы вызываете getLogger("TestLog") в каждом из ваших экземпляров, вы получите ссылку на точно такой же Logger объект. Следовательно, он будет регистрироваться только в одном месте, которое настроено для регистратора «TestLog».

Если вы хотите, чтобы выходные данные этих двух экземпляров отправлялись в разные места, вам нужно, чтобы они вызывали getLogger с разными аргументами, чтобы они получали разные средства ведения журнала (и, конечно, настраивали систему ведения журнала так, чтобы эти два регистраторы имеют разные выходы).

...