2009-12-23 13 views
24

Voglio sbarazzarsi di questo lotto ...Esiste già un'API varargs per Java 1.5 per 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); 

... e sostituirlo con questo ...

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

... in modo che la mia sintassi registrazione non lo fa devo cambiare a seconda del numero di argomenti che voglio registrare. Sembra che ci sia un sacco di discussione e di lavoro attorno ad esso, ma dov'è? O dovrei avvolgere il wrapper che è slf4j?

+3

Se un progetto open-source non accetta le tue patch e hai bisogno della particolare funzionalità, la risposta sembra abbastanza ovvia, no? – kdgregory

+0

@kdgregory - no, non ovvio e non come dovrebbe funzionare; questa è una mentalità commerciale (fatalista), dove software = vendor.pay(). requestFeature(). receiveUpgrade(); se cattura UnsupportedException, è un nuovo Vendor() || self.screwed(). Ma openSource = public.download(). Use(). RequestFeature(). AwaitUntil (public.getConsensus()); se il consenso <= costa (in tempo o $$), dovrebbe valerne la pena. Gran parte del mio tempo (come deviatore commerciale) viene speso per implementare miglioramenti mal concepiti, motivati ​​non dal consenso/dal buon senso, ma dai dollari. Ricevuti(). Mi aspetto anche di mantenere questo messaggio, aggiungendo costi futuri. – michael

+0

@michael_n - non sono sicuro di come hai interpretato il mio commento, ma la risposta ovvia è "fai un fork". È bello se i manutentori del progetto vogliono le stesse cose che fai, ma non sempre succede. – kdgregory

risposta

4

Dalla lettura del javadoc SLF4J per Logger la risposta semplice sembrerebbe essere no. Da quello che ho letto vogliono rimanere compatibili con le versioni precedenti del JDK.

Se non si è davvero legati all'utilizzo di SLF4J, forse log5j è un'opzione?

+1

+1 per il riferimento log5j - sembra pulito! –

+0

No, vogliono rimanere compatibili binari con le versioni precedenti di slf4j. –

14

La vera domanda è: "Perché deve un JDK < 5 essere supportata da questo più"? Se hai una versione precedente di java, utilizza l'API precedente. È così semplice. Perché non adattarlo meglio all'attuale mondo java? Voglio dire, JDK 5 non è nemmeno supportato senza un contratto di supporto da Sun/Oracle. La compatibilità con le versioni precedenti è uno scherzo in questo caso.

+1

Il supporto dipende dalla piattaforma. IBM supporta 1.4 ón le loro piattaforme. –

+0

Oh, e tu rispondi a "perché deve ..." è che Ceki, lo slf4j dittatore benevolo, vuole che sia così. –

+2

Non capisco ... perché non rendere slf4j 2.x compatibile con Java 5 e mantenere slf4j 1.x compatibile con java 0.0.1? – rustyx

5

Che dire di questo:

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

è possibile utilizzare va() in altri posti.

1

Esiste una soluzione per l'utilizzo di vararg con SLF4J.

C'è un progetto open source chiamato Lumberjack che estende SLF4J per fornire metodi di registrazione vararg. L'estensione è molto naturale, non si sente alcuna differenza rispetto all'utilizzo di SLF4J (questo perché Lumberjack è solo un wrapper attorno a SLF4J, quindi tutte le funzionalità sono ancora fornite da SLF4J).

Esempio di utilizzo:

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 sito: https://github.com/bogdanu/lumberjack

La licenza Lumberjack è la stessa patente di SLF4J, la licenza MIT, quindi non c'è alcuna restrizione di licenza aggiuntivi.

Disclaimer: io sono l'autore di Lumberjack

0

Prova jcabi-log toolkit, che avvolge SLF4J registrazione con un'interfaccia conveninent vararg.

11

Questo è finalmente risolto. SLF4J 1.7.0 ora richiede JDK 1.5 e ha metodi varargs compatibili con le versioni precedenti.

Problemi correlati