En rails, quiero registrar cierta información en un archivo de registro diferente y no en el desarrollo estándar .log o production.log. Quiero hacer este registro desde una clase de modelo.
fuente
En rails, quiero registrar cierta información en un archivo de registro diferente y no en el desarrollo estándar .log o production.log. Quiero hacer este registro desde una clase de modelo.
Puede crear un objeto Logger usted mismo desde cualquier modelo. Simplemente pase el nombre del archivo al constructor y use el objeto como los Rails habituales logger
:
class User < ActiveRecord::Base
def my_logger
@@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
end
def before_save
my_logger.info("Creating user with name #{self.name}")
end
end
Aquí utilicé un atributo de clase para memorizar el registrador. De esta manera, no se creará para cada objeto de usuario que se cree, pero no es necesario que lo haga. Recuerde también que puede inyectar el my_logger
método directamente en la ActiveRecord::Base
clase (o en alguna superclase propia si no le gusta demasiado el parche de mono) para compartir el código entre los modelos de su aplicación.
User.logger = Logger.new(STDOUT)
o donde quiera iniciar sesión. Del mismo modo,ActiveRecord::Base.logger = Logger.new(STDOUT)
cambiará todo el registro de todos los modelos.User.logger = Logger.new(STDOUT)
cambió todo el registro para todos los modelos. Bueno, cambióActiveRecord::Base.logger
my_logger
enapplication_controller.rb
.Actualizar
Hice una gema basada en la solución a continuación, llamada multi_logger . Solo haz esto en el inicializador:
y llama
y listo
Si desea codificarlo usted mismo, consulte a continuación:
Una solución más completa sería colocar lo siguiente en su
lib/
oconfig/initializers/
directorio.El beneficio es que puede configurar el formateador para prefijar las marcas de tiempo o la gravedad de los registros automáticamente. Esto es accesible desde cualquier lugar en Rails, y se ve más ordenado usando el patrón singleton.
fuente
#{$$}
?Una opción decente que funciona para mí es agregar una clase bastante simple a su
app/models
carpeta, comoapp/models/my_log.rb
luego en su controlador, o realmente en casi cualquier lugar donde pueda hacer referencia a la clase de un modelo desde su aplicación rails, es decir, en cualquier lugar que pueda hacer
Post.create(:title => "Hello world", :contents => "Lorum ipsum");
o algo similar, puede iniciar sesión en su archivo personalizado de esta manerafuente
Defina una clase de registrador en (digamos) app / models / special_log.rb:
Inicialice el registrador en (digamos) config / initializers / special_log.rb:
En cualquier lugar de su aplicación, puede iniciar sesión con:
fuente
Aquí está mi registrador personalizado:
fuente
fuente
Sugeriría usar la gema Log4r para el registro personalizado. Descripción de la cita de su página:
fuente
fuente
¡El marco de registro, con su nombre engañosamente simple, tiene la sofisticación que anhelas!
Siga las instrucciones breves de los rieles de inicio de sesión para comenzar a filtrar el ruido, recibir alertas y elegir la salida de una manera fina y de alto nivel.
Date una palmadita en la espalda cuando hayas terminado. Rollo de registro, todos los días. Vale la pena por eso solo.
fuente