Le logger ruby avec son bloc
Alors que je m'amusais à étendre le Logger de base de Ruby, j'ai découvert que l'on pouvait utiliser le Logger comme ci-dessous :
Logger.debug { "My object is #{self.map(&:id)}" }
Par défaut, on l'utilise en fournissant une string en paramètre comme ceci : Logger.debug("My object is #{self.map(&:id)}").
La différence entre ces deux écritures ?
La première permet d'éviter d'évaluer la chaine qui sera loggé si elle n'en a pas besoin. Contrairement à la deuxième qui sera toujours évaluée même si vous ne la loggez pas. Ainsi le temps de traitement pourrais s'en faire ressentir.
Grâce à ça, on peux facilement éviter les fameux :
Logger.debug("My object is #{self.map(&:id)}") if Logger.level == Logger::DEBUG
En effet, ce genre de code est très fréquent en Java, pour gagner un petit peu en performance sans perdre ses logs.
Mer 21 oct 2009 21:08 Publié sous ruby, Informatique, Java