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