Есть ли API Java 1.5 varargs для slf4j? - PullRequest
       60

Есть ли API Java 1.5 varargs для slf4j?

24 голосов
/ 23 декабря 2009

Я хочу избавиться от этого лота ...

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?

Ответы [ 7 ]

14 голосов
/ 07 июня 2010

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

11 голосов
/ 10 сентября 2012

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

7 голосов
/ 23 декабря 2009

Нет.

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

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

5 голосов
/ 19 марта 2011

Что по этому поводу:

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 () и в других местах.

4 голосов
/ 23 декабря 2009

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

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

1 голос
/ 08 мая 2012

Существует решение использования 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");

Сайт лесоруба: https://github.com/bogdanu/lumberjack

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

Отказ от ответственности: я - автор Дровосека

0 голосов
/ 14 мая 2012

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

...