перенаправление System.out / System.err в log4j только для некоторых jar-файлов - PullRequest
1 голос
/ 30 октября 2010

В нашем продукте мы используем ряд внешних библиотек. Мы ведем логи с помощью log4j, и большинство библиотек делают то же самое, поэтому мы получаем большинство сообщений в наших приложениях.

Но есть несколько библиотек, которые просто используют System.out и System.err. Поэтому я ищу способ перенаправить System.out и System.err в наши приложения log4j только для конкретного jar , другие библиотеки, использующие log4j, не должны затрагиваться они иногда печатаются в System.out и System.err, и эти сообщения все равно должны идти туда.

Возможно ли это как-нибудь?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Не уверен, что вы можете получить поток вывода для приложения log4j, но если вы просто хотите отправить его в файл журнала, вы можете направить system.out в файл, как показано ниже:



 File file  = new File("my.log");
 PrintStream printStream = new PrintStream(new FilleOutputStream(file));
 System.setOut(printStream);


Вы можете сделать то же самое для System.err

Мне нравится первая ссылка Фахима, у него есть решение, чтобы свернуть файл.

1 голос
/ 30 октября 2010

Гипотеза - Никогда не пытался

  • Создание пользовательского уровня журнала. Уровень должен быть ниже Level.ALL
  • Переопределить поток печати std в свой собственный поток. Выполните вывод консоли и журнала с вашим пользовательским уровнем
  • Создайте новую категорию для необходимого вам пакета и установите его уровень ведения журнала на ваш пользовательский уровень ведения журнала

Полезный пример кода

http://blogs.oracle.com/nickstephen/entry/java_redirecting_system_out_and

и

log4j перенаправить стандартный вывод в DailyRollingFileAppender

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