Подтвердить что ты не робот

Есть ли API-интерфейсы Java 1.5 varargs для slf4j?

Я хочу избавиться от этой партии...

public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);

... и замените его на этот...

public void info(String format, Object ... args);

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

4b9b3361

Ответ 1

Реальный вопрос: "Зачем нужно поддерживать jdk < 5?"? Если у вас более старая версия java, используйте старый API. Это так просто. Почему бы не сделать это лучше в текущем мире Java? Я имею в виду, JDK 5 даже не поддерживается без контракта на поддержку от Sun/Oracle. Обратная совместимость - это шутка в этом случае.

Ответ 2

Это окончательно решено. SLF4J 1.7.0 теперь требует JDK 1.5 и имеет обратные методы varargs.

Ответ 3

Нет.

Проблема по-прежнему открыта, как сделать это правильно, сохраняя при этом 100% обратную совместимость.

Не стесняйтесь видеть обсуждение на http://bugzilla.slf4j.org/show_bug.cgi?id=31

Ответ 4

Как насчет этого:

package util;

public class Util {
  public static Object[] va(Object... args) {
    return args;
  }
}

package foo;
import static util.Util.va;
...
 logger.info("a {}, b {}, c c {}", va("A", "B", "C"));
...

вы также можете использовать va() в других местах.

Ответ 5

Из прочтения javadoc SLF4J для Logger простой ответ будет казаться нет. Из того, что я прочитал, они хотят оставаться совместимыми со старыми версиями JDK.

Если вы не привязаны к использованию SLF4J, то возможно log5j является опцией?

Ответ 6

Существует решение использования varargs с SLF4J.

Существует проект с открытым исходным кодом под названием Lumberjack, который расширяет SLF4J, чтобы обеспечить методы ведения журнала varargs. Расширение очень естественно, вы не чувствуете никакой разницы по сравнению с использованием SLF4J (это связано с тем, что Lumberjack является только оберткой вокруг SLF4J, поэтому все функции все еще предоставляются SLF4J).

Пример использования:

JackLogger logger = JackLoggerFactory.getLogger(LoggerFactory.getLogger(Weather.class));

logger.info("Hello {}! The current time is {}:{}:{}, and after {} hours the weather will be {}.", "Jack", 13, 30, 0, 5, "sunny");

Сайт Lumberjack: https://github.com/bogdanu/lumberjack

Лицензия Lumberjack совпадает с лицензией SLF4J, лицензией MIT, поэтому нет никаких дополнительных ограничений на лицензирование.

Отказ от ответственности: я являюсь автором Lumberjack

Ответ 7

Попробуйте jcabi-log toolkit, который переносит ведение журнала SLF4J с помощью удобного интерфейса vararg.