2010-02-17 3 views

Répondre

0

Vous pouvez créer votre propre enregistreur en surchargeant les Logger class

+0

Il n'y a pas un moyen facile sans écrire beaucoup de code? – turri

+0

@turri pas que je sache. Il semble que les niveaux sont assez codés (Logger :: INFO et ainsi de suite). Peut-être qu'il y a une autre façon, mais je ne peux pas y penser maintenant – marcgg

3

niveaux Log sont des constantes de rien, mais entier définies dans logger.rb:

# Logging severity. 
module Severity 
    DEBUG = 0 
    INFO = 1 
    WARN = 2 
    ERROR = 3 
    FATAL = 4 
    UNKNOWN = 5 
end 

Vous pouvez connecter des messages avec tous les niveaux vous aimez utiliser Logger#add méthode:

l.add 6, 'asd' 
#=> A, [2010-02-17T16:25:47.763708 #14962] ANY -- : asd 
3

Votre propre enregistreur suffit d'écraser le Logger#format_severity méthode, quelque chose comme ceci:

class MyLogger < Logger 

    SEVS = %w(DEBUG INFO WARN ERROR FATAL VERBOSE TRAFFIC) 
    def format_severity(severity) 
    SEVS[severity] || 'ANY' 
    end 

    def verbose(progname = nil, &block) 
    add(5, nil, progname, &block) 
    end 
end 
+0

IMO, c'est une meilleure réponse, car elle évite le patch de singe du noyau de Ruby. + – sethvargo

4

Vous pouvez simplement ajouter à la classe Logger:

require 'logger' 

class Logger 
    def self.custom_level(tag) 
    SEV_LABEL << tag 
    idx = SEV_LABEL.size - 1 

    define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block| 
     add(idx, nil, progname, &block) 
    end 
    end 

    # now add levels like this: 

    custom_level 'TRAFFIC' 
    custom_level 'ANOTHER-TAG' 
end 


# using it: 

log = Logger.new($stdout) 
log.traffic('testing') 
log.another_tag('another message here.') 
2

Si vous commencez à avoir besoin d'un tas de choses sur mesure, il peut être utile de vérifier log4r, qui est une bibliothèque de journalisation flexible qui vous permet de faire un tas de choses intéressantes/utiles facilement.

0

Ceci est une vieille question, mais comme il apparaît tellement haut sur google, j'ai pensé qu'il serait utile d'avoir à corriger la réponse. Vous pouvez réellement utiliser la méthode Logging.init. Voici comment vous ajouteriez un niveau de journal trace

require 'logging' 
Logging.init %w(trace debug info warn error fatal) 
Logging.logger.root.level = :trace 
Logging.logger.root.add_appenders Logging.appenders.stdout 
Logging.logger['hello'].trace 'TEST' 

Ce utilise le 2.0.0 de la gemme logging.

Questions connexes