2010-11-16 21 views
4

Je me demandais s'il existe des systèmes de journalisation vraiment unifiés qui peuvent prendre en charge les tâches retardées Rails et, et qui sont relativement faciles à configurer. Je veux pouvoir me connecter au même serveur/fichier pour n'importe quel contexte d'exécution dans mon application (Rails, tâches retardées, etc.), même si je ne suis pas actuellement dans un contexte Rails. Love the Rails logger, mais je ne peux pas me connecter à lui lors d'un travail Resque. Des idées?Existe-t-il un système de journalisation unifié pour Ruby?

Répondre

6

Voulez-vous dire un enregistreur de fichiers, similaire à syslog?

Ruby a à la fois Logger et Syslog. Le Logger peut faire rouler le journal, gère les niveaux de gravité et est utilisé dans de nombreux modules Ruby pour la journalisation. Vous pouvez définir le nom du fichier à journaliser ou utiliser STDOUT/STDERR ou un flux d'E/S. Les docs pour syslog sont assez barebones, mais vous pouvez obtenir des informations en parcourant son code source, ou en lisant le Ruby Syslog README.

2

Je dois consigner ce qui se passe dans une gemme qui fonctionne avec un travail de resque. Pour vous connecter ce qui se passe à la base de données Rails, je fais ce qui suit:

#in gem: 
class Foo 
    def self.logger 
    @@logger ||= Logger.new(nil) 
    end 

    def self.logger=(logger) 
    @@logger = logger 
    end 

    def self.logger_reset 
    self.logger = Logger.new(nil) 
    end 

    def self.logger_write(obj_id, message, method = :info) 
    self.logger.send(method, "|%s|%s|" % [obj_id, message]) 
    end 
end 

#in rails in initializers 
Foo.logger = MyRailsLogger.new 

#in in rails in lib or in model if it uses ActiveRecord 
class MyRailsLogger 
    def info 
    ... 
    end 

    ... 
end 

De cette façon, je peux connecter les choses qui se passent dans différents processus et également filtrer les journaux par object_id de l'instance Foo, alors que les données pertinentes se connecté .