Ejercicio Práctico Módulos en Ruby

Realizar un módulo que implemente los métodos:

  • log  –> Recibirá dos argumentos, uno es el nivel en el que se quiere escribir (:info, :debug y :warn) y la cadena de texto a escribir.
  • logfile=  –> Nos permitirá asignar el fichero en el que se va a escribir, por defecto “ /.practicaruby.log”.
  • logfile    –> Nos devolverá el fichero en el que se va a escribir, por defecto “ /.practicaruby.log”.

Al ser llamado, log escribirá en el fichero de destino una cadena del tipo:

–> “[fecha-hora || clase] WARN: blablabla”

module Logger
  LEVELS = {
      :warn => 'WARNING',
      :info => 'INFO',
      :debug => 'DEBUG'
  }

  def log(level, error)
    File.open(logfile, 'a') {|file| file.write(format_message(error, level))}
  end

  def logfile=(new_file_path)
    @path = new_file_path
  end

  def logfile
    return @path || './practicaruby.log'
  end

  private
  def format_message(error, level)
    datetime = Time.now.strftime("%d/%m/%Y %H:%M:%S")
    name_of_class = self.class.to_s
    level = "#{LEVELS[level] || 'UNDEFINED'}"

    return "[" + datetime + " || " + name_of_class + "] " + level + ": " + error + "\n"
  end

end

 

Cuando este el módulo finalizado:

  • Se crearán dos clases que incluyan el módulo.
  • Cada clase escribirá varios ejemplos de log para cada nivel.
  • Cambiar el fichero de log.
class Foo
  include Logger
  end


class ExampleClass
  include Logger
end



foo = Foo.new
foo.log(:warn, 'This is a Warning Message')
foo.log(:info, 'This is a Info Message')
foo.log(:debug, 'This is a Debug Message')
foo.log(:undefined_level, 'This is a Undefined Level Message')


exampleObject = ExampleClass.new
exampleObject.log(:warn, 'This is a Warning Message')
exampleObject.log(:info, 'This is a Info Message')
exampleObject.log(:debug, 'This is a Debug Message')
exampleObject.log(:undefined_level, 'This is a Undefined Level Message')


foo.logfile=("./prueba.log")

foo.log(:warn, 'This is a Warning Message')

 

RESULTADO:

  • Fichero practicaruby.log
[06/08/2018 13:08:36 || Foo] WARNING: This is a Warning Message
[06/08/2018 13:08:36 || Foo] INFO: This is a Info Message
[06/08/2018 13:08:36 || Foo] DEBUG: This is a Debug Message
[06/08/2018 13:08:36 || Foo] UNDEFINED: This is a Undefined Level Message
[06/08/2018 13:08:36 || ExampleClass] WARNING: This is a Warning Message
[06/08/2018 13:08:36 || ExampleClass] INFO: This is a Info Message
[06/08/2018 13:08:36 || ExampleClass] DEBUG: This is a Debug Message
[06/08/2018 13:08:36 || ExampleClass] UNDEFINED: This is a Undefined Level Message
  • Fichero prueba.log
[06/08/2018 13:08:36 || Foo] WARNING: This is a Warning Message