Montar un sistema de LOG

Hola a todos,
siguiento con el tema de la aplicación mientrenamiento.com que estoy
realizando, he montado un pequeño sistema de LOGS:

  • El usuario X ha hecho tal cosa
  • El usuario X ha eliminado tal cosa
  • El usuario…

Para ello he montado lo siguiente:

class Log < ActiveRecord::Base
belongs_to :loggable, :polymorphic => true
belongs_to :user, :foreign_key => ‘user_id’
end

Y ahora en cualquier modelo que quiero utilzar LOGs:

class Training < ActiveRecord::Base

has_many :logs, :as => :loggable, :dependent => :destroy

after_create { |training|
log = Log.create(:user_id => training.user.id, :action => ‘created’)
log.loggable = training
log.save
}

end

Aquí sólo he mostrado como crear un log para la acción ‘create’, pero se
podría añadir una para ‘update’ y ‘delete’. Mi pregunta es que este
método funciona, pero no lo veo muy potente, más que nada por si quiere
logear otras cosas que no sean acciones CRUD y las vistas no son
facilonas, hay que comprobar que acción se ha hecho y montar las cadenas
de texto a mostrar.
Por todo esto me gustaría encotrar otras soluciones ¿alguien tiene algo
parecido? Así podríamos encontrar entre todos la mejor forma de hacerlo.

Venga, un saludo.

On 7/4/08, Vicent G. [email protected] wrote:

class Log < ActiveRecord::Base
after_create { |training|
logear otras cosas que no sean acciones CRUD y las vistas no son
facilonas, hay que comprobar que acción se ha hecho y montar las cadenas
de texto a mostrar.
Por todo esto me gustaría encotrar otras soluciones ¿alguien tiene algo
parecido? Así podríamos encontrar entre todos la mejor forma de hacerlo.

Y por que no usar el log estandard de rails?
logger.info, logger.debug, etc

Yo más que un log, lo que entiendo que necesitas es una auditoría, sobre
lo que se hace o no se hace…

¿Has pensado en utilizar este plugin?
http://agilewebdevelopment.com/plugins/acts_as_audited

Un saludo!

El vie, 04-07-2008 a las 10:37 +0200, Vicent G. escribió:

logger.info, logger.debug, etc

También es una opción a tener en cuenta, claro.


Juan José Vidal Agustín [email protected]
Universidad de Murcia
ÁTICA - Área de Tecnologías de la Información y las Comunicaciones
Aplicadas
Proyecto SOFTLA - Software Libre y Abierto Universidad de Murcia
Edificio Ática, Campus Univ. de Espinardo
E-30100 Murcia (SPAIN)

Tlf.: +34 968 39 8741

On Jul 4, 2008, at 10:28 AM, Dani D. wrote:

Y por que no usar el log estandard de rails?

Yo he pensado lo mismo, pero entiendo que si lo quiere meter en la
base de datos es para despues mostrarselo al usuario por pantalla no?
Con Logger tendrias que pasarlo despues a la base de datos … y puede
ser más follon.

Los datos de log que estas almacenando son para que los vea el usuario?

Claro,
la idea es que el usuario pueda tener un registro en su página principal
de las ultimas acciones que ha hecho él o sus ‘amigos’. Tipo Facebook.

logger.info, logger.debug, etc

También es una opción a tener en cuenta, claro.

On Jul 4, 2008, at 11:30 AM, Vicent G. wrote:

la idea es que el usuario pueda tener un registro en su página
principal
de las ultimas acciones que ha hecho él o sus ‘amigos’. Tipo Facebook.

A mi lo que has hecho me parece super correcto. Lo que normalmente se
guarda es la actividad CRUD como has comentado, que otro tipo de
actividad quieres guardas?

Dices … “hay que comprobar que acción se ha hecho y montar las
cadenas de texto a mostrar.”

Eso con lo puedes hacer con un after_filter que se encargue de meter
lo que ha hecho el usuario despues de ejecutar la acción. Desde mi
punto de vista, al final lo que estas haciendo siempre es realizar
operaciones con modelos … de manera que por ejemplo no ha de ser muy
dificil hacer cosas como …

  1. Has añadido un favorito
  2. Has añadido al usuario X
  3. Has enviado un mensaje a X y Y.

Ya que todo eso està en la base de datos, tu simplemente lo que haces
es meterlo en una linea de tiempo, que es el Log. ¿No?

¿Puedes comentar por ejemplo alguna cosa que creas que no se puede
hacer
así?

On Fri, Jul 4, 2008 at 11:43 AM, Manuel González Noriega
[email protected] wrote:

2008/7/4 Vicent G. [email protected]:

Claro,
la idea es que el usuario pueda tener un registro en su página principal
de las ultimas acciones que ha hecho él o sus ‘amigos’. Tipo Facebook.

Para que te sea más fácil el investigar, esto se suele llamar
“Activity Stream”. Lo de “log” queda para el log operacional clásico.

Parece que estoy destinado a llegar un paso por detrás de Manu siempre
XD. En el desarrollo de Tog [1], tenemos una problemática parecida
para reflejar la actividad de los usuarios. Inicialmente valoramos la
opción de Lovdbyless[2], que básicamente tiene unos after_XXX para
generar entradas de actividad. Para la primera versión de Tog estamos
manejando algo parecido a lo que comentas, un modelo ActivityStream
linkado a cada usuario representando su diario de abordo. El modelo no
esta especialmente ligado al ciclo de vida ninguna otra entidad y es
básicamente un saco de texto sin formato ordenado cronologicamente. En
nuestro caso el enlace con el usuario permite el acceso y el uso del
mismo desde extensiones y plugins.

En mi opinion es la opcion con mejor calidad/precio.

[1] http://www.toghq.com/
[2] http://lovdbyless.com/


Kind Regards,
Aitor Garcia
Cofounder - Linking Paths
http://www.linkingpaths.com

2008/7/4 Vicent G. [email protected]:

Claro,
la idea es que el usuario pueda tener un registro en su página principal
de las ultimas acciones que ha hecho él o sus ‘amigos’. Tipo Facebook.

Para que te sea más fácil el investigar, esto se suele llamar
“Activity Stream”. Lo de “log” queda para el log operacional clásico.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

Hay un paradigma que es la programación orientada a aspectos(aspect
oriented programming) que permite hacer esto de manera cómoda, ya que a
grandes rasgos lo que haces es indicar que cuando se llamen a ciertos
métodos que digas, se ejecute determinado código.
No sé cómo estará de maduro este tema en ruby aunque googleando parece
que hay librerías para esto: http://aquarium.rubyforge.org

Saludos.

Vicent G. escribió:

On 7/4/08, Borja Martín [email protected] wrote:

Hay un paradigma que es la programación orientada a aspectos(aspect
oriented programming) que permite hacer esto de manera cómoda, ya que a
grandes rasgos lo que haces es indicar que cuando se llamen a ciertos
métodos que digas, se ejecute determinado código.
No sé cómo estará de maduro este tema en ruby aunque googleando parece
que hay librerías para esto: http://aquarium.rubyforge.org

Si no me equivoco, a los aspectos, en ruby se les llama “mixins” y
vienen soportados de serie.

On 7/4/08, Borja Martín [email protected] wrote:

Aspect.new(Foo, :bar) do |obj|
puts “se ha llamado a el metodo #bar de la clase Foo”
end

de tal manera que cuando hagamos Foo.new.foo mostraría
hola
se ha llamado a el metodo #bar de la clase Foo

Mmmm vale, tienes razón. Con los mixins puedes desplegar metodos en
varias clases ( en cierto modo es un aspecto ), pero añadirles
“triggers” creo que no…

Por mixin se entiende a incluir dentro de una clase código de un módulo.
Yo estoy hablando de hacer cosas del tipo:

class Foo
def foo
puts “hola”
end
end

Aspect.new(Foo, :bar) do |obj|
puts “se ha llamado a el metodo #bar de la clase Foo”
end

de tal manera que cuando hagamos Foo.new.foo mostraría
hola
se ha llamado a el metodo #bar de la clase Foo

Lluego supongo que la librería te podrá elegir si llamar a tú código al
inicio o al final de la llamada.

Saludos

Dani D. escribió: