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
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.
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é .