Nous utilisons java.util.loggingVarArgs à java.util.logging java 8
void log(Level level, Throwable thrown, Supplier<String> msgSupplier)
et quelques méthodes pratiques comme
logp(Level level, String sourceClass, String sourceMethod,
String msg, Object params[])
Mais aucune méthode varargs. Comment venir? Est-ce sembler une amélioration future ou est-il une bonne raison de ne pas avoir quelque chose comme:
public void log(Level level, Throwable t, String msg, Object... params) {
// throw new RuntimeException("No yet impl");
if (!isLoggable(level)) {
return;
}
LogRecord lr = new LogRecord(level, msg);
lr.setParameters(params);
if (t != null) {
lr.setThrown(t);
}
doLog(lr);
}
J'ai créé aide:
public static void log(Logger logger, Level level, Throwable t, String msg, Object... params) {
// throw new RuntimeException("No yet impl");
if (!logger.isLoggable(level)) {
return;
}
LogRecord lr = new LogRecord(level, msg);
lr.setParameters(params);
if (t != null) {
lr.setThrown(t);
}
logger.log(lr);
}
aurait aimé avoir appelé dolog au lieu de journal dans la dernière ligne , mais doLog est une aide privée! Je ne sais pas pourquoi, car il n'y a aucun moyen pour moi de définir le paquet, etc - souhaite qu'il soit
public void doLog (LogRecord lr) au lieu de privé.
Quoi qu'il en soit, pour que nous fassions les mêmes choses, la méthode suivante nous permet d'utiliser notre propre méthode varargs?
// resource bundle and then call "void log(LogRecord)".
private void doLog(LogRecord lr) {
lr.setLoggerName(name);
final LoggerBundle lb = getEffectiveLoggerBundle();
final ResourceBundle bundle = lb.userBundle;
final String ebname = lb.resourceBundleName;
if (ebname != null && bundle != null) {
lr.setResourceBundleName(ebname);
lr.setResourceBundle(bundle);
}
log(lr);
}
Ceci est basé sur l'opinion. 'java.util.logging' a été introduit dans Java 1.4. Pourquoi n'a-t-il pas profité de toutes les fonctionnalités des versions ultérieures de Java? Personne ne le sait sauf les auteurs du paquet. Probablement parce qu'ils ont de meilleures choses à faire. – Michael
Ancienne API. Sun et Oracle ne voyaient aucun besoin de mise à jour. Vous pouvez envisager d'utiliser slf4j pour abstraire l'implémentation et obtenir des varargs. –
Je seconde cela. SLF4J est la norme de l'industrie ces jours-ci. Il a une meilleure API et est entièrement compatible avec JUL. –