Obecnie używam puts
, ale jestem pewien, że to nie jest poprawna odpowiedź. W jaki sposób poprawnie skonfigurować rejestrator, w moim klejnocie, aby wygenerować moje wewnętrzne rejestrowanie zamiast puts
?Jak poprawnie logować się wewnątrz mojego klejnotu Ruby?
Odpowiedz
trochę przykład:
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)
Podczas inicjalizacji ty utwórz rejestrator (@log
). W twoich metodach nazywasz logger.
Dzięki @log.level=
(lub MyClass#log.level=
) możesz wpływać na to, które wiadomości są używane.
Możesz użyć różnych programów wyjściowych (w moim przykładzie loguję do STDOUT). Można również mieszać outputters (np STDOUT z ostrzeżeniami, każde dane (w tym debug) do pliku ...)
Najbardziej elastyczne podejście dla użytkowników klejnotów polega na umożliwieniu im dostarczenia rejestratora zamiast instalowania go wewnątrz klejnotu. W najprostszej może to być
class MyGem
class << self
attr_accessor :logger
end
end
wtedy użyć MyGem.logger.info "hello"
do wiadomości dziennika z klejnot (warto zawinąć go w metodzie narzędzie, które sprawdza, czy rejestrator jest ustawiony w ogóle)
Użytkownicy Twój gem można następnie kontrolować, gdzie wiadomości się zalogować do (pliku, syslog, stdout, etc ...)
Myślę, że najprostszym sposobem jest użycie go w ten sposób
Rails.logger.info "hello"
Dlaczego zakładasz, że Rails jest używany? Pytanie mówi tylko o Rubim i własnym klejnocie. – knut
Był nieuważny. W moim przypadku z Railsami to pomogło, więc przepraszam za offtop. –
można zachować rejestrator w swoim module najwyższego poziomu. Zezwól użytkownikowi na ustawienie własnego rejestratora, ale zapewnia rozsądne ustawienie domyślne dla tych, którzy nie dbają o rejestrację. Dla np.
module MyGem
class << self
attr_writer :logger
def logger
@logger ||= Logger.new($stdout).tap do |log|
log.progname = self.name
end
end
end
end
Następnie, w dowolnym miejscu w obrębie kodu gem można uzyskać dostęp do rejestratora. Dla np.
class MyGem::SomeClass
def some_method
# ...
MyGem.logger.info 'some info'
end
end
Referencje:
- 1. Dziwne błędy podczas instalacji mojego klejnotu
- 2. Sprawdź wersję klejnotu z wiązarką od wewnątrz Ruby
- 3. Jak odwoływać się do lokalnego klejnotu ze skryptu ruby?
- 4. uruchom adnotację klejnotu wewnątrz rubymine
- 5. Pakowanie prekompilowanych plików binarnych wewnątrz klejnotu
- 6. Jak programowo logować się do wordpressa?
- 7. Jak pisać hiperłącza za pomocą klejnotu arkusza kalkulacyjnego w Ruby?
- 8. Wymaganie klejnotu wewnątrz zadania rake gemowego
- 9. Skąd znam rozmiar mojego dokumentu wewnątrz MongoDB ze sterownikiem ruby
- 10. Uwalnianie rake'a zawiesza się po zwolnieniu klejnotu
- 11. Znajdowanie korzenia klejnotu
- 12. Mosh logować się automatycznie załóż tmux sesji
- 13. PostgreSQL: rola nie może się logować
- 14. Jak włączyć interaktywną ruby do mojego procesu rozwoju?
- 15. Jak poprawnie dodać UIImageView wewnątrz UIStackView
- 16. Jak mogę wymagać określonej wersji rubinowego klejnotu?
- 17. Jak poprawnie używać klauzuli guard w Ruby
- 18. Trudności z instalowaniem klejnotu ruby-filemagic na nowym serwerze RHEL6
- 19. Błąd instalacji brakującego klejnotu RVM
- 20. Jak uczynić ActiveRecord :: Schema.define nie logować się na standardowe wyjście?
- 21. Jak debugować wtyczkę cordova i logować się za pomocą "android.util.log"
- 22. Problemy z instalowaniem klejnotu Ruby "ffi" na serwerze Ubuntu 12.04
- 23. Jak logować treść wiadomości WCF?
- 24. Załaduj klejnotu ruby do przestrzeni nazw zdefiniowanej przez użytkownika
- 25. Klejnotu sqlite3-ruby nie można znaleźć sqlite3.h na ubuntu
- 26. Rails 3.1 - błąd klejnotu terubiratu
- 27. Pisanie do plików Excela w Ruby przy użyciu klejnotu roo
- 28. Nie można zainstalować klejnotu ruby-debugowania w systemie Windows
- 29. Nie można zainstalować klejnotu Nokogiri
- 30. Czy mogę odwoływać się do lambda z wewnątrz używając Ruby?
Proszę zobaczyć moje aktualizację, moje sformułowanie było mylące. Chcę poprawnie zalogować się do moich wewnętrznych metod. – Kamilski81
Nie jestem pewien, o co w tym momencie chodzi. –
Dziękuję bardzo, miałem zamiar popełnić okropny błąd. – Gerry