2009-12-23 16 views
24

quiero para deshacerse de este lote ...¿Existe todavía una API Java 1.5 varargs para 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); 

... y reemplazarlo con éste ...

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

... para que mi sintaxis de registro no lo hace tiene que cambiar dependiendo de la cantidad de argumentos que quiero registrar Parece que hay mucha discusión y trabajo alrededor, pero ¿dónde está? ¿O debería envolver la envoltura que es slf4j?

+3

Si un proyecto de código abierto no acepta sus parches, y necesita la funcionalidad particular, entonces la respuesta parece bastante obvia, ¿no? – kdgregory

+0

@kdgregory - no, no es obvio y no cómo debería funcionar; esa es una mentalidad comercial (fatalista), donde software = vendor.pay(). requestFeature(). receiveUpgrade(); si captura UnsupportedException, es un nuevo proveedor() || self.screwed(). Pero openSource = public.download(). Use(). RequestFeature(). AwaitUntil (public.getConsensus()); si el consenso <= costo (en tiempo o $$), debería valer la pena. Gran parte de mi tiempo (como comercial sw dev) lo paso implementando mejoras mal concebidas motivadas no por consenso/sentido común, sino por dólares recibidos(). También se espera que mantenga esto. Esto se suma a los costos futuros. – michael

+0

@michael_n: no estoy seguro de cómo interpretaste mi comentario, pero la respuesta obvia es "hacer un tenedor". Es agradable que los mantenedores del proyecto quieran las mismas cosas que tú, pero no siempre sucede. – kdgregory

Respuesta

4

Al leer el javadoc SLF4J para Logger, la respuesta más simple sería no. Por lo que he leído, quieren mantenerse compatibles con las versiones anteriores del JDK.

Si no está realmente ligado al uso de SLF4J, ¿entonces tal vez log5j es una opción?

+1

+1 para la referencia log5j - ¡suena bien! –

+0

No, quieren permanecer compatibles con versiones anteriores de slf4j. –

14

La verdadera pregunta es "¿Por qué tiene un JDK < 5 se apoya en esto por más tiempo"? Si tienes una versión anterior de Java, utiliza la API anterior. Es así de simple. ¿Por qué no hacer que esto se adapte mejor al mundo java actual? Quiero decir, JDK 5 ni siquiera es compatible sin un contrato de soporte de Sun/Oracle. La compatibilidad con versiones anteriores es una broma en este caso.

+1

El soporte depende de la plataforma. IBM soporta 1.4 en sus plataformas. –

+0

Oh, y la respuesta a "¿por qué debe ..." es que Ceki, el dictador benevolente slf4j, quiere que sea así. –

+2

No lo entiendo ... ¿por qué no hacer slf4j 2.x que sea compatible con Java 5 y mantener slf4j 1.x compatible con java 0.0.1? – rustyx

5

Qué tal esto:

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")); 
... 

puede utilizar VA() en otros lugares también.

1

Hay una solución para usar varargs con SLF4J.

Hay un proyecto de código abierto llamado Lumberjack que amplía SLF4J para proporcionar métodos de registro varargs. La extensión es muy natural, no sientes ninguna diferencia en comparación con el uso de SLF4J (esto es porque Lumberjack es solo una envoltura alrededor de SLF4J, por lo que toda la funcionalidad sigue siendo proporcionada por SLF4J).

Ejemplo de uso:

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"); 

página web de leñador: https://github.com/bogdanu/lumberjack

La licencia de leñador es la misma que la licencia de SLF4J, la licencia MIT, por lo que no hay ninguna restricción de licencia adicional.

responsabilidad: yo soy el autor de leñador

0

Trate jcabi-log conjunto de herramientas, que se envuelve SLF4J registro con una interfaz conveninent vararg.

11

Esto finalmente ha sido resuelto. SLF4J 1.7.0 ahora requiere JDK 1.5 y tiene métodos varargs compatibles hacia atrás.

Cuestiones relacionadas