slf4j / log4j: отключение вывода консоли, когда консоль не подходит - PullRequest
2 голосов
/ 19 апреля 2011

Я запускаю JVM программно с ProcessBuilder . Для ясности давайте назовем JVM, которая использует JBM A ProcessBuilder, и ту, в которой он запускает JVM B. JVM B использует slf4j / log4j для ведения журнала.

Проблема здесь в том, что класс, который я выполняю в JVM B, - это класс, который я иногда запускаю в отладчике, где полезно иметь консольный вывод.

Однако, если я запускаю JVM B с ProcessBuilder, то я не хочу вывод консоли, потому что для этого требуется JVM A для чтения вывода процесса или зависание JVM B.

Есть ли способ управления slf4j или log4j изнутри JVM B, чтобы, если мой основной класс в JVM посчитал нецелесообразным использование консоли для ведения журнала, он не попытался бы это сделать? ( например, он отключает консольные приложения) Я бы предпочел не поддерживать отдельные файлы log4j.configuration, хотя я сделаю это, если потребуется.

например. в моем основном классе

static {
   if (shouldntUseConsole())
   {
      ?????
   }
}

Я могу понять, как реализовать shouldntUseConsole(), но я не знаю, что поставить на ?????.

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Вы можете использовать два файла log4j с объектом конфигуратора свойств.Ваш код будет выглядеть примерно так:

   import org.apache.log4j.PropertyConfigurator;

if(shouldntUseConsole())
 {
   PropertyConfigurator.configure("NotConsoleLog4J.props");
 }


 else
    { 
      PropertyConfigurator.configure("ConsoleLog4J.props");
    }

Вот соответствующий javadoc: http://logging.apache.org/log4j/1.2/apidocs/index.html

1 голос
/ 19 апреля 2011

Прежде всего, slf4j - это API с реализацией, за которой стоит log4j, поэтому вам необходимо настроить реализацию, а не slf4j.есть разные файлы конфигурации.Для log4j вы можете использовать разные наборы файлов для A и B с двумя разными файлами log4j.properties или одну конфигурацию, указав в системном свойстве log4j.configuration имя другого файла конфигурации.* Подробнее см. Раздел «Процедура инициализации по умолчанию» в http://logging.apache.org/log4j/1.2/manual.html.

...