slf4j: поведение отладки несовместимо?

#log4j #slf4j

#log4j #slf4j

Вопрос:

Я использую slf4j log4j с моей библиотекой.

Я использую его в быстром приложении, где меня не особо волнует настройка ведения журнала… или, по крайней мере, я не думал, что меня это волнует.

Если я не настрою log4j, я получу стандартное предупреждающее сообщение

 log4j:WARN No appenders could be found for logger com.xyz.abcdbabble
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  

и это нормально.
Если я затем сделаю

 logger.debug("Blah blah blah")
  

тогда регистратор ничего не выводит. Отлично!

Но если я сделаю

 if (logger.isDebugEnabled())
{
    System.out.println("print some complex stuff:");
    print_some_complex_stuff();
}
  

затем выполняется то, что указано в скобках. Что дает?

Я ищу способ определить, следует ли распечатывать что-то, что должно иметь эквивалентное разрешение logger.debug() , даже если log4j не настроен в конечном приложении. Как я могу это сделать?

Ответ №1:

Вместо того, чтобы пытаться выяснить логику конфигурации log4j по умолчанию, я бы поместил в конфигурационный файл (log4j.properties), например:

 log4j.rootLogger=debug, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
  

По крайней мере, это дает вам контроль.

Комментарии:

1. Это позволяет конечному пользователю (человеку, который запускает java) контролировать ситуацию, что обычно и является тем, чего вы хотите. Не человек, разрабатывающий программу. В этом случае я не хочу нормальной ситуации. У меня есть «тупые» пользователи, которые понятия не имеют, и им все равно, как настроить log4j, и они просто хотят ввести java myClass arg0 arg1 arg2 .

Ответ №2:

Вместо того, чтобы связываться с log4j, тогда связывайтесь с «простым» бэкэндом из дистрибутива slf4j. Тогда все работает так, как вы хотите, и пользователи не могут возиться.