Derzeit verwende ich puts
, aber ich bin mir sicher, dass das nicht die richtige Antwort ist. Wie richte ich einen Logger innerhalb meines Edelsteins korrekt ein, um meine interne Protokollierung anstelle von puts
auszugeben?Wie melde ich mich korrekt in meinem Ruby-Juwel?
Antwort
ein kleines Beispiel:
gem 'log4r'
require 'log4r'
class MyClass
def initialize(name)
@log = Log4r::Logger.new(name)
#Add outputter
#~ log.outputters << Log4r::FileOutputter.new('log_file', :filename => 'mini_example.log', :level => Log4r::ALL)
log.outputters << Log4r::StdoutOutputter.new('log_stdout') #, :level => Log4r::WARN)
#~ log.outputters << Log4r::StderrOutputter.new('log_stderr', :level => Log4r::ERROR)
@log.level = Log4r::INFO
@log.info("Creation")
#~ @log.level = Log4r::OFF
end
attr_reader :log
def myfunction(*par)
@log.debug("myfunction is called")
@log.warn("myfunction: No parameter") if par.empty?
end
end
x = MyClass.new('x')
x.myfunction
y = MyClass.new('y')
y.myfunction
y.myfunction(:a)
y.log.level = Log4r::DEBUG
y.myfunction(:a)
Während der Initialisierung Sie Erstellen Sie einen Logger (@log
). In Ihren Methoden rufen Sie den Logger an.
Mit @log.level=
(oder MyClass#log.level=
) können Sie beeinflussen, welche Nachrichten verwendet werden.
Sie können verschiedene Ausgabegeräte verwenden (in meinem Beispiel logge ich mich in STDOUT ein). Sie können auch outputters (zB STDOUT mit Warnungen, die alle Daten (einschließlich debug) in eine Datei ...) mischen
Der flexibelste Ansatz für Benutzer Ihres Edelsteins ist, dass sie einen Logger bereitstellen, anstatt ihn innerhalb des Edelsteins einzurichten. In seiner einfachsten Form könnte dies
seinclass MyGem
class << self
attr_accessor :logger
end
end
Sie verwenden MyGem.logger.info "hello"
dann Nachrichten aus Ihrem Juwel einzuloggen (möchten Sie vielleicht in einem Hilfsmethode umhüllen, die prüft, ob ein Logger überhaupt eingestellt ist)
Benutzer von Ihre Perle kann dann steuern, wo Nachrichten protokolliert werden (eine Datei, syslog, stdout, etc ...)
Ich denke, der einfachste Ansatz es auf diese Weise
Rails.logger.info "hello"
Warum nehmen Sie an, dass Rails verwendet wird? Die Frage dreht sich nur um Ruby und ein eigenes Juwel. – knut
War unaufmerksam. In meinem Fall mit Rails ist es nur geholfen, so leid für Offtop. –
Sie halten zu verwenden ist Logger in Ihrem Top-Level-Modul. Benutzern erlauben, ihren eigenen Logger einzurichten, aber einen angemessenen Standard für diejenigen bereitzustellen, die sich nicht mit der Protokollierung befassen. Für z.B.
module MyGem
class << self
attr_writer :logger
def logger
@logger ||= Logger.new($stdout).tap do |log|
log.progname = self.name
end
end
end
end
Dann können Sie überall in Ihrem Gem-Code auf den Logger zugreifen. Für z.B.
class MyGem::SomeClass
def some_method
# ...
MyGem.logger.info 'some info'
end
end
Referenzen:
- 1. Wie melde ich mich an?
- 2. Wie melde ich mich Exen und dlls mit meinem Codesignierungszertifikat
- 3. Wie melde ich mich von deepstream.io ab?
- 4. Wie melde ich mich manuell in Meteor an?
- 5. Wie melde ich mich lokal bei SQL Server an
- 6. Wie melde ich mich aus dem Firebase Cloud Messaging Messaging
- 7. Wie melde ich mich zu phpMyAdmin auf Google Cloud
- 8. Wie erstelle/melde ich mich bei einem Spotify-Entwicklerkonto an?
- 9. Java - Ich melde mich an, ich habe ein paar Ideen, aber müssen sie vervollständigen
- 10. Wie melde ich mich mit facebook connect in einer Flex-Anwendung an
- 11. Wie melde ich mich Benutzer mit Sitzung basierte und grundlegende Authentifizierung in Django Rest Framework?
- 12. Wie melde ich mich bei OneDrive an (nach der Anfangszeit), ohne den Berechtigungsbildschirm zu sehen
- 13. Ist der Social Auth-Mechanismus von Stackoverflow (ich melde mich mit meinem Google-Konto an) auf OpenID Connect?
- 14. Wie melde ich einen Benutzer mit Meteor
- 15. Wie melde ich nicht behandelte Ausnahmen in ASP.NET MVC?
- 16. Wie melde ich mich über eine URL bei Google Apps an?
- 17. Wie melde ich mich automatisch mit dem Gerät nach der Registrierung an?
- 18. Wie melde ich mich bei einem Exchange-Kalender von Excel an
- 19. Wie kann ich mich richtig mit meinem lokalen Mongodb verbinden?
- 20. Wie melde ich mich mit python 3 auf einer Website an?
- 21. Wie melde ich mich mit einer Android-App bei einer externen Website an?
- 22. Wie melde ich ein Talend Job Ergebnis?
- 23. Wie melde ich eine Klassenkomponente eines Ereignisses?
- 24. Ich kann mich nicht in meinem WordPress-Konto anmelden
- 25. Wie kann ich UNIX_TIMESTAMP korrekt auf meinem lokalen setzen?
- 26. Ich habe einen TFS 2010 Server installiert, wie melde ich mich an und füge weitere Benutzer hinzu?
- 27. Wie melde ich einen Handler in net/http ab?
- 28. Wie melde ich ein Widget in einem Dojo Javascript
- 29. Wie melde ich ein Modell in Wagtail modeladmin ab?
- 30. Wie melde ich den Breitengrad in diesem Google Maps Javascript?
Bitte beachten Sie meine Update war meine Formulierung verwirrend. Ich möchte mich korrekt in meine internen Methoden einloggen. – Kamilski81
Ich bin mir nicht sicher, was du danach willst. –
Vielen Dank, ich war dabei einen schrecklichen Fehler zu machen. – Gerry