Gibt es ein einheitliches Erfassungssystem für Ruby?
-
10-10-2019 - |
Frage
ich mich gefragt, ob es irgendwelche wirklich einheitliche Erfassungssysteme gibt, die Rails unterstützen und verzögert Arbeitsplätze und sind relativ einfach einzurichten.
Ich mag für jeden Ausführungskontext in meiner Anwendung auf die gleiche Server / Datei protokollieren können (Rails, verzögert Jobs, etc), auch wenn ich in einem Rails-Kontext nicht zur Zeit bin.
Love the Rails-Logger, aber ich kann nicht daran anmelden, während in einem Resque Job. Irgendwelche Ideen?
Lösung
Wollen Sie eine Datei-Logger, ähnlich wie syslog?
got Rubys beide Logger
und Syslog
.
Logger kann Protokollroll tun, Griffe Schweregrade und wird in einer Menge von Ruby Module zur Protokollierung. Sie können den Namen der Datei definieren, um zu protokollieren, oder STDOUT / STDERR oder einen IO-Stream.
Die Dokumentation für syslog sind ziemlich Barebones, aber Sie können Informationen erhalten, indem Sie den Quellcode einfügen oder Ruby-Syslog README .
Andere Tipps
Ich habe Dinge zu protokollieren, die in einem Edelstein geschehen, die von einem resque Auftrag ausgeführt wird. Um sich einzuloggen, was auf Rails Datenbank wird ich wie folgt vor:
#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
Auf diese Weise kann ich Dinge einzuloggen, die in verschiedenen Verfahren geschehen und auch Filter-Protokolle durch object_id der Foo-Instanz, so dass nur relevante Daten protokolliert werden.