Actualmente estoy usando puts
, pero estoy seguro de que esa no es la respuesta correcta. ¿Cómo configuro correctamente un registrador, dentro de mi gema, para generar mi registro interno en lugar de puts
?¿Cómo me registro correctamente dentro de mi gema Ruby?
Respuesta
un pequeño ejemplo:
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 la inicialización se crear un registrador (@log
). En sus métodos, llama al registrador.
Con @log.level=
(o MyClass#log.level=
) puede influir en los mensajes que se utilizan.
Puede utilizar diferentes emisores (en mi ejemplo me conecto a STDOUT). También se puede mezclar en productores (por ejemplo STDOUT con advertencias, cada uno de los datos (incluyendo depuración) a un archivo ...)
El enfoque más flexible para los usuarios de su gema es permitirles proporcionar un registrador en lugar de instalarlo dentro de la gema. En su más simple que esto podría ser
class MyGem
class << self
attr_accessor :logger
end
end
A continuación, utiliza MyGem.logger.info "hello"
para registrar los mensajes de su joya (es posible que desee para envolverlo en una método de utilidad que comprueba si un registrador se establece en absoluto)
usuarios de su joya a continuación, puede controlar dónde mensajes se registran en (un archivo, syslog, stdout, etc ...)
creo que el método más sencillo es utilizar de esta manera
Rails.logger.info "hello"
¿Por qué asumes que se usa Rails? La pregunta solo habla de Ruby y una joya propia. – knut
estaba distraído. En mi caso con Rails, solo ayudó, así que lo siento por offtop. –
Puede mantener el registrador en su módulo de nivel superior. Permita que los usuarios configuren su propio registrador pero proporcionen un valor predeterminado razonable para aquellos que no se preocupan por el registro. Por ej.
module MyGem
class << self
attr_writer :logger
def logger
@logger ||= Logger.new($stdout).tap do |log|
log.progname = self.name
end
end
end
end
Luego, en cualquier lugar dentro de su código de gema puede acceder al registrador. Por ej.
class MyGem::SomeClass
def some_method
# ...
MyGem.logger.info 'some info'
end
end
Referencias:
- 1. Ruby: ¿Cómo escribir una gema?
- 2. Cómo modificar una gema Ruby
- 3. Errores extraños al instalar mi gema
- 4. gema matemática Ruby
- 5. ¿Cómo ejecuto una gema de Ruby?
- 6. ¿Cómo monopatch Ruby correctamente?
- 7. Ruby Daemons rotación de registro
- 8. ¿Qué es una gema Ruby?
- 9. Ruby gema listada, pero no se cargará (gema en dir de usuario, no ruby dir)
- 10. Ruby: lista de correo biblioteca o gema
- 11. ¿Cómo incluir un controlador con una gema Ruby on Rails?
- 12. Prueba de modelos ActiveRecord dentro de una gema?
- 13. ¿Cómo eliminar la gema de la aplicación Ruby on Rails?
- 14. Ruby, Rails: gema mysql2, ¿alguien usa esta gema? ¿Es estable?
- 15. Ruby LESS equivalente de gema en Python
- 16. ¿Cómo puedo escribir en el registrador Rails dentro de mi gema?
- 17. ¿Cómo me registro exes y dlls con mi certificado de firma de código
- 18. Instalación de gema bcrypt-ruby en Windows
- 19. cómo usar el registro dentro de Gevent?
- 20. Detectar parada con la gema Ruby Daemons
- 21. ruby: código para instalar gema si falta
- 22. ¿Necesito tener un favicon en mi sitio? ¿Cómo me deshago de los errores que veo en mi registro de Apache?
- 23. Empaquetado de binarios precompilados dentro de una gema
- 24. ¿Cómo acceder a la versión de una gema desde Ruby?
- 25. Usar correctamente Log4r en la aplicación Ruby
- 26. ¿Cómo me aseguro de que strtol() haya regresado correctamente?
- 27. Cómo anular el registro correctamente un controlador de eventos
- 28. ¿Cómo puedo especificar una gema local en mi Gemfile?
- 29. Ruby: Rendimiento dentro de enumerable
- 30. ¿Cómo agregar asociaciones de archivos correctamente al Registro de Windows?
favor ver mi actualización, mi redacción es confusa. Quiero iniciar sesión en mis métodos internos correctamente. – Kamilski81
No estoy seguro de lo que buscas entonces. –
Muchas gracias, estaba a punto de cometer un terrible error. – Gerry