log4j 1.2.15 и перенаправление System.out и System.err

В приложении Java/Swing мы перенаправили System.out и System.err в отдельное представление (называемое «SystemOutView»), которое открывается при появлении нового вывода. Это отлично работает для выброшенных исключений и System.out.println(). Это представление можно настроить с помощью файла свойств (т. е. активно ли оно вообще и открывается ли оно при выводе или нет).

В этом проекте мы используем log4j 1.2.15. Я обнаружил, что выходные данные log4j, даже если они отправляются в STDOUT, НЕ перенаправляются в SystemOutView, если какое-то ведение журнала уже имело место ДО того, как был создан экземпляр SystemOutView, и System.out и System.err были перенаправлены на него.

Другими словами:

  1. Перенаправить System.out и System.err в SystemOutView
  2. someLogger.debug("...")

... отлично работает: журнал появляется в SystemOutView.

НО:

  1. someLogger.debug("...")
  2. Перенаправить System.out и System.err в SystemOutView
  3. someLogger.debug("...")

... НЕ работает: 2-й оператор журнала переходит в STDOUT (как и 1-й) и НЕ перенаправляется в SystemOutView.

Поскольку SystemOutView можно настроить с помощью файла свойств, перед созданием экземпляра SystemOutView выполняется целая куча работы, поэтому очень вероятно, что выдаются некоторые операторы журнала. Что делает невозможным перенаправление вывода журнала в SystemOutView.

Что я могу с этим поделать?

Заранее большое спасибо
:-Денис


person Denis    schedule 07.05.2013    source источник


Ответы (1)


ХОРОШО. Я решил проблему самостоятельно.

Всякий раз, когда вы перенаправляете STDOUT и STDERR, log4j необходимо повторно инициализировать, используя:

DOMConfigurator.configure(ConfigFileURL);
person Denis    schedule 08.05.2013