123 votes

Avantages de la mise en forme avec {} au lieu de la concaténation de chaînes pour l'enregistreur slf4j

Y a-t-il un avantage {} au lieu de la concaténation de chaîne ?

Un exemple de slf4j

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

au lieu de

logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT);

Je pense qu'il s'agit d'optimisation de la vitesse car l'évaluation des paramètres (et la concaténation des chaînes) peuvent être évitées pendant l'exécution en fonction d'un fichier de configuration. Mais seulement deux paramètres sont possibles, alors parfois il n'y a pas d'autre choix que la concaténation de chaîne. Besoin de points de vue sur cette question.

8voto

Rabin Pantha Points 633

Depuis, String est immuable en Java, de sorte que les chaînes gauche et droite doivent être copiées dans la nouvelle chaîne pour chaque paire de concaténation. Alors, vas-y pour l'espace réservé.

3voto

yegor256 Points 21737

Une autre alternative est String.format(). Nous l'utilisons dans jcabi-log (enveloppe d'utilitaire statique autour de slf4j).

Logger.debug(this, "some variable = %s", value);

C'est beaucoup plus facile à entretenir et à prolonger. En plus, c'est facile à traduire.

2voto

Tianhao Wang Points 163

Je pense que du point de vue de l'auteur, la raison principale est de réduire les frais généraux pour la concaténation des chaînes.Je viens de lire la documentation de l'enregistreur, vous pourriez trouver les mots suivants :

/**
* <p>This form avoids superfluous string concatenation when the logger
* is disabled for the DEBUG level. However, this variant incurs the hidden
* (and relatively small) cost of creating an <code>Object[]</code> before 
  invoking the method,
* even if this logger is disabled for DEBUG. The variants taking
* {@link #debug(String, Object) one} and {@link #debug(String, Object, Object) two}
* arguments exist solely in order to avoid this hidden cost.</p>
*/
*
 * @param format    the format string
 * @param arguments a list of 3 or more arguments
 */
public void debug(String format, Object... arguments);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X