повторяющиеся строки в Java-апплете при использовании log4j - PullRequest
3 голосов
/ 30 апреля 2011

Я пытаюсь использовать log4j в апплете, но каждый раз, когда я обновляю страницу в браузере (для перезапуска апплета), я получаю дублированные строки вывода в консоли java. Количество копий выходных данных увеличивается после каждого обновления.

Этот код воспроизводит эффект:

public class HelloWorldApplet extends JApplet {
    static Logger logger = Logger.getLogger(HelloWorldApplet.class);
    public void init() {
        BasicConfigurator.configure();
        logger.info("Hello log4j");
        System.out.println("Hello System.out");
    }
}

И это вывод, который я вижу:

0 [thread applet-HelloWorldApplet.class-26] INFO HelloWorldApplet  - Hello log4j
Hello System.out
<refresh>
1987 [thread applet-HelloWorldApplet.class-27] INFO HelloWorldApplet  - Hello log4j
1987 [thread applet-HelloWorldApplet.class-27] INFO HelloWorldApplet  - Hello log4j
Hello System.out
<again>
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
3156 [thread applet-HelloWorldApplet.class-28] INFO HelloWorldApplet  - Hello log4j
Hello System.out

Очистка кэша загрузчика классов исправляет его, и я знаю, что мне нужно очистить кэш загрузчика классов, чтобы фактически перезагрузить апплет, но иногда я просто хочу перезапустить его, особенно при отладке. Поэтому я хотел бы понять:

  1. Почему это происходит?
  2. Есть ли способ предотвратить это?

Спасибо!

1 Ответ

3 голосов
/ 30 апреля 2011

Из javadocs для BasicConfigurator:

public static void configure()

Добавьте ConsoleAppender, который использует PatternLayout, используя PatternLayout.TTCC_CONVERSION_PATTERN и печатает в System.outв корневую категорию.

Таким образом, вы добавляете новый аппендер каждый раз, когда апплет инициализируется.Попробуйте сначала позвонить resetConfiguration().

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