Есть ли 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?
Ответы
Ответ 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.