Ruby : étendre la classe Logger

Je ne vous apprendrez rien en vous disant que vos applications gagneraient bien souvent à utiliser un fichier de log. C’est un moyen simple d’améliorer la sécurité, de produire quelques statistiques et de fournir des pistes pour la chasse aux bugs.
La classe Logger de Ruby, dans sa version de base, ne me convient pas parfaitement, pour la plupart de mes projets. Ceci pour 2 raisons :

  1. Il n’est pas évident d’utiliser une même instance de Logger dans toute l’application. Or, dans la plupart des cas, je n’utilise qu’un seul log par application.
  2. 9 fois sur 10, un événement qui sera logué au niveau FATAL devra entraîner la fin prématurée de l’application, ce que ne fait pas la classe Logger.

Je vous propose donc la petite amélioration suivante :

La classe Log, qui hérite de Logger

require "logger"

class Log < Logger
  private_class_method :new

  @@logger = nil

  def Log.instance(fileName = 'log.log')
    @@logger = new fileName unless @@logger
    @@logger
  end

  def fatal message
    super message
    puts "FATAL : #{message}"
    puts 'Exit...'
    exit 1
  end
end

Le pattern singleton

Il suffit de marquer la méthode new comme private et d’enregistrer la première instance crée dans une variable de classe. Lors du premier appel à Log#instance, vous pouvez spécifier un nom pour le fichier de log. Lors des appels suivants vous recevrez toujours le même objet.

log = Log.instance

Étendre la méthode Logger#fatal

Lorsque je logue un message de niveau FATAL avec un objet de la classe Logger, je dois écrire ceci :

logger.fatal 'un message'
puts 'un message' # ou boite de dialogue en environnement GUI.
puts 'Fin du programme !'
exit 1

Le petit souci est qu’il faut écrire cela à chaque endroit du programme pouvant provoquer la fin prématurée de l’application. En étendant la méthode Logger#fatal au sein de la classe Log, il suffit maintenant d’écrire :

log.fatal 'un message' # affiche aussi le message + fin du programme.

et le tour est joué.

Références

Qu’est ce qu’un fichier de log ? http://fr.wikipedia.org/wiki/Historique_(informatique)

Le pattern singleton http://en.wikipedia.org/wiki/Singleton_pattern

Publicités

, , , ,

  1. Poster un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :