Attualmente sto usando puts
, ma sono sicuro che non è la risposta corretta. Come faccio ad impostare correttamente un logger, all'interno della mia gemma, per generare il mio logging interno invece di puts
?Come posso accedere correttamente alla mia gemma Ruby?
risposta
una piccola premessa:
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)
Durante l'inizializzazione si crea un logger (@log
). Nei tuoi metodi chiami il registratore.
Con @log.level=
(o MyClass#log.level=
) è possibile influenzare quali messaggi vengono utilizzati.
È possibile utilizzare diversi outputter (nel mio esempio accedo a STDOUT). Si può anche mescolare outputters (ad esempio STDOUT con avvisi, ognuno dei dati (compresi debug) in un file ...)
L'approccio più flessibile per gli utenti della tua gemma è di consentire loro di fornire un logger piuttosto che configurarlo all'interno della gemma. Nel caso più semplice questo potrebbe essere
class MyGem
class << self
attr_accessor :logger
end
end
È quindi utilizzare MyGem.logger.info "hello"
per registrare i messaggi dal vostro gioiello (si potrebbe desiderare di avvolgerlo in un metodo di utilità che verifica se un registratore viene impostato a tutti)
Gli utenti di il vostro gioiello può quindi controllare in cui i messaggi vengono registrati a (un file, syslog, stdout, ecc ...)
penso che l'approccio più semplice è quello di utilizzare in questo modo
Rails.logger.info "hello"
Perché presumi che Rails sia usato? La domanda parla solo di Ruby e di una sua gemma. – knut
Non è stato attivato. Nel mio caso con Rails è appena stato aiutato, mi dispiace per Offtop. –
È possibile mantenere il logger nel tuo modulo di primo livello. Permetti agli utenti di impostare il proprio logger, ma fornire un valore predefinito ragionevole per coloro che non si preoccupano di gestire la registrazione. Ad es.
module MyGem
class << self
attr_writer :logger
def logger
@logger ||= Logger.new($stdout).tap do |log|
log.progname = self.name
end
end
end
end
Poi, ovunque all'interno del codice gemma è possibile accedere al data logger. Ad es.
class MyGem::SomeClass
def some_method
# ...
MyGem.logger.info 'some info'
end
end
Riferimenti:
- 1. Dove posso inserire file non Ruby nella mia gemma?
- 2. Come accedere alla mia chiave pubblica SSH?
- 3. Apache: come posso accedere alla mia pagina web da un computer esterno alla mia rete?
- 4. Come accedere alla mia webcam in Python?
- 5. Come impedire all'utilità "gem" di accedere alla mia home directory?
- 6. Posso accedere alla mia classe .NET personalizzata da PowerShell?
- 7. Come accedere correttamente alla proprietà PrivateBinPath dell'appDomain corrente?
- 8. Ruby "posta" docs gemma
- 9. Ruby: come scrivere una gemma?
- 10. Ruby Geolocation Gemma/Plugin
- 11. Come rendere un eseguibile gemma Ruby
- 12. Come posso accedere alla versione alpha della mia app Android su Google Play?
- 13. Come posso accedere alla mia funzione C++ nel mio codice C o viceversa?
- 14. Ruby: libreria o gemma Mailing List
- 15. Come installare un file gemma Ruby scaricato?
- 16. Come faccio a copiare un file da una gemma alla mia applicazione Rails utilizzando rastrello
- 17. Come accedere in modo sicuro alla mia API dalla mia applicazione web?
- 18. Come posso accedere alla rubrica di iPhone in un'app Web?
- 19. Posso accedere alla libreria iPod sul simulatore?
- 20. Rileva fermata con gemma Ruby Daemons
- 21. Perché la mia gemma impiega così tanto tempo a caricarsi?
- 22. Come posso aggiungere una scheda app alla mia pagina Facebook?
- 23. Come posso associare un enum alla mia listbox?
- 24. Come posso accedere alla chat di Hangout di Google+?
- 25. Come posso accedere alla sessione in un webmethod?
- 26. Come posso accedere alla cartella "Documenti e impostazioni"?
- 27. Come posso accedere dinamicamente alla proprietà dell'oggetto Java in GWT?
- 28. Come posso accedere alla sezione di configurazione di package.json?
- 29. Come posso accedere alla variabile del template nella macro TWIG?
- 30. Gli attacchi svn ruby sono forniti come gemma?
Si prega di vedere il mio aggiornamento, il mio testo era confusa. Voglio accedere correttamente ai miei metodi interni. – Kamilski81
Allora non sono sicuro di cosa stai cercando. –
Grazie mille, stavo per fare un errore orribile. – Gerry